第十章 UNIX 系统内核结构

  • Upload
    preston

  • View
    148

  • Download
    6

Embed Size (px)

DESCRIPTION

第十章 UNIX 系统内核结构. 参考 《 UNIX 操作系统设计 》 Maurice J.Bach. 主要内容 UNIX 系统的特点 ; 进程 , 存储 , 文件 , 设备管理的相关数据结构及算法 重点 UNIX 系统的进程管理 ( 数据结构 , 算法 ) 文件管理超级块 , 索引结点 , 空闲块管理. 第十章 UNIX 系统内核结构. 10.1 UNIX 系统概述. 1. UNIX 系统的特征 1) 开放性 2) 多用户、多任务环境 3) 功能强大,实现高效 4) 提供了丰富的网络功能 5) 支持多处理器功能. - PowerPoint PPT Presentation

Citation preview

  • UNIX UNIX Maurice J.Bach

  • UNIX; ,,,UNIX(,),,

  • UNIX

  • 10.1 UNIX1. UNIX1) 2) 3) 4) 5)

  • UNIXUNIX

  • I/O Shell UNIXUNIX

  • 2. UNIX 10-1 UNIX

  • 1) (1) (2) (3) (4)

  • 2) (1) (2) (3)

  • 10.2 UNIX (1) (2) U (3) (4) 2.1

  • 1. (Process Table Entry) (1) (PID) (2) (UID) (3) (4) (5) U (6) (7) (8) (9) nice (10) P-Link (11) U

  • 2. U(U Area) (1) (2) u-ruid(real user ID) (3) u-euid(effective user ID) (4) (5) (6) (7) I/O (8) (9) (10) (11)

  • 3. (System Region Table) (1) (2) (3) (4) (5)

  • 4. (Per Process Region Table) 10-2

  • 2.2 1.

  • 12345

    678910-4

  • 1

  • 20#

  • 3

  • 2. UNIX

    PCPSWPCB

  • 0#0#1#12n. . .. . .2.3

  • 0# 1# 1# UNIX

  • 1. schedPID=0 UNIX swapmemory() 2. initPID=1 bootlogin ancestor schedancestor 3. vhandPID=2 memoryswap 4. dbflushPID=3 buffer cache 5. kmdaemonPID=4 6. htepi_daemonPID=5 ht filesystem driver

  • 1. fork(1) (2) (3) (4) (5) (6)

  • main(){pid_t pid;pid=fork();if(pid==0)exec(program);else if(pid>0)wait();}(1) (2) (3) (4) (5) (6)

  • 2. execint execv(path,argv)char *path,*argv[]int execl(path,arg0[,arg1,...,argn], 0)char * path,*arg0,*arg1,.......,*argn

  • 3. exit exitexit(1) (2) (3) (4)

  • 4. wait wait wait

  • main(){int i;while((i=fork()==-1);if (i) { printf(Its parent process.\n);wait();printf(My child process,Id number%d exited.\n,i);exit();}else printf(It is child process);printf(It is parent or child process);}ID331

  • 1Its parent processIt is child processIt is parent or child processMy child process,Id number 33 exited

  • 2It is child processIt is parent or child processIts parent processMy child process,Id number 33 exited3It is child processIts parent processIt is parent or child processMy child process,Id number 33 exited

  • 2UN IX Amian() /*A*/{fork();fork();fork();}

  • mian() /*A*/{fork();fork();fork();}mian() /*B*/{fork();fork();fork();}

  • ABCEDFGH

  • 3#include main(){char command[32];char *prompt=>;while (printf(%s,prompt),gets(command)!=NULL){if (fork()==0) execl(command,command,(char *) 0); else wait(); }}

  • 24 UNIX CPU CPU

  • UNIX1CPU

    0#swtch

  • Round Robin With Multiple Feedback)

  • N .....CPU

  • 123) 45cpu

  • UNIXn+1 0n

  • Unix sys V,

  • Ppri= Pcpu/2+PUSER+Pnice+NZERO

    Pcpu CPU

    Pnice0~40nicePUSERNZERO

  • Pcpu/2=0

    a) :Pcpu

    b) :Pcpu2Pcpu/2CPU

  • ,

  • 0CPU0

    user

  • 10.3 1 sleepwakeup234UNIX V IPC

  • a.bc 3.1 sleepwakeup1. sleep

  • 2. wakeup :

  • 3.2 (signal) 1. 1~19PCB19

  • killint kill(pid,sig);pidpidpid 0 sig

  • signal(sig,func)func=1sigfunc=0 sigfunc 0/1func

  • func==1func==0corefunc 0/1

  • 3.3 1. (Unnamed Pipes) pipe() (Named Pipes) mknod

  • 2. pipe 2) 3) 4)

  • 3.4-1

  • 1. key

  • 2) 10-6

  • msgget()int msgget(key,msgflag)

    key: msgflagipc_CREATkeymsgid

    msgid

  • msgsnd()msgsnd(msgid,msgp,msgsz,msgflg)

    msgidmsgpmsgszmsgflg

  • msgrev()msgrev(msgid,msgp,msgsz,msgtpy,msgflg);msgid msgpmsgszmsgtpy msgflg

  • 3.4-2 1. 10-7

  • UNIX

  • int shmget(key,size,shmflg);

    key:sizeshmflg

    shmid

  • shmatShmat(shmid,shmaddr,shmflg);

    ShmidShmaddrShmflg

  • shmdt()

    int shmdt(shmaddr);

    shmaddr:

  • 3.4-3 1) UNIXwaitsignalUNIXwaitsignalsemop( )semget( )semctl( )1.

  • 2)

  • 2. 1) semvalsempid

  • 2) 10-8

  • 3. 1) semget( ) semid

  • 2) semop( ) semop semopsemopsemopsemop

  • 10.4 10.4.1 1. 1) 10-9

  • 2. 1) 1 2

  • 2) 10-11

  • 10.4.2 1. 012301231310

  • 2. (1)1 (2) (3)

  • 3. 64 KB1001

  • 10.4.3 1. 2. 3.