版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、UNIX操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),目 錄,參考文獻(xiàn)第一章 UNIX系統(tǒng)概論第二章 文件系統(tǒng)第三章 進(jìn)程結(jié)構(gòu)第四章 進(jìn)程調(diào)度第五章 進(jìn)程控制第六章 信號(hào)與會(huì)話第七章 虛擬存儲(chǔ)器* 第八章 設(shè)備管理*第九章 進(jìn)程通信第十章 TCP/IP 與 socket接口,參考文獻(xiàn),1. M.J.Bach, The Design of the UNIX Operating System. Prenti
2、ce Hall 1990. 人民郵電出版社 2003. UNIX 操作系統(tǒng)設(shè)計(jì). 機(jī)械工業(yè)出版社 2000. 2. M.K.McKusick et al., The Design and Implementation of the 4.4 BSD UNIX Operating System. Addision-Wesley Reading, MA, 19
3、96. 4.4 BSD UNIX操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn). 電力出版社 2003. 3. Uresh Vahalia, UNIX Internals –The New Frontiers. Prentice Hall 1996. 人民郵電出版社 2003. UNIX 高級(jí)教程 系統(tǒng)技術(shù)內(nèi)幕. 清華大學(xué)出版社.1999. 4. John Lions, Lion
4、s’ Commentary on UNIX 6th Edition with Source Code.Peer-to-Peer Communications, Inc. 1996. 萊昂氏UNIX源代碼分析. 機(jī)械工業(yè)出版社 2000.,5. Scott Maxwell, Linux Core Kernel Comentary. The Coriolis Group
5、2000. Linux內(nèi)核源代碼分析. 機(jī)械工業(yè)出版社 2000. 6. D.P.Bovet & M.Cesati, Understanding the Linux Kernel. O’Reilly & Associates, Inc. 2001.深入理解Linux內(nèi)核. 中國電力出版社 2001.7. W.R.Stevens, Advan
6、ced Programming In the Unix Environment. Addsion Wesley 1992. Unix環(huán)境高級(jí)編程. 機(jī)械工業(yè)出版社 2000. 8. W.R.Stevens, Unix Network Programming . vol I: Networking API:Socket and XTI(2
7、nd). Prentice Hall 1998. Unix網(wǎng)絡(luò)編程 第1卷: 連網(wǎng)的API,套接字與XTI. 清華大學(xué)出版社 1998.,9. W.R.Stevens, Unix Network Programming
8、 vol II: Interprocess Communications(2nd). Prentice Hall 1999. Unix網(wǎng)絡(luò)編程 第2卷: 進(jìn)程間通信. 清華大學(xué)出版社 2000.10. A
9、.S.Tanenbaum, Computer Networks( 3rd Edition). Prentice Hall 1996 . 計(jì)算機(jī)網(wǎng)絡(luò)(第三版). 清華大學(xué)出版社 1996.11. Amir Afzal, Unix Unbounded A Beginning Approah .
10、 Prentice Hall 2003. Unix 初級(jí)教程(第四版). 電子工業(yè)出版社 2004.,第一章 UNIX系統(tǒng)概論,一。歷史與現(xiàn)狀二。系統(tǒng)結(jié)構(gòu)三。核心結(jié)構(gòu)四。中斷與系統(tǒng)調(diào)用五。程序員界面六。面向?qū)ο蟮脑O(shè)計(jì)*七。習(xí)題,一。歷史與現(xiàn)狀,Unix簡史 Unix當(dāng)前流行版本 Unix優(yōu)點(diǎn)和缺點(diǎn) Unix標(biāo)準(zhǔn)化 Linux簡史 Linux優(yōu)點(diǎn)和缺點(diǎn),Unix簡史,1965
11、-1969 Multics(Multiple Information Computing Service) US DOD ? MIT, AT&T Bell, GE1970 Unix V1(PDP-7), A
12、T&T Bell , K.Thompson,D.M.Ritchie1970 Unix V2(B Language), K.Thompson1972 C Language, D.M.Ritchie1973 Unix V5 ( C )1973 ACM OS 原理會(huì)議1974 CACM “The Unix Time Sharing System”1975 Unix V6 發(fā)行源代碼1978 Unix V7
13、 移植到不同機(jī)器上1980 BSD 發(fā)行BSD4.0 ,Microsoft 發(fā)行XENIX1981 AT&T System III (USG - UNIX System Group)1983 AT&T System V (USG并入U(xiǎn)SL(UNIX System Laboratory))1983 D.M.Ritchie & K.Thompson獲 ACM Turing 獎(jiǎng),1984 UNIX
14、 System V Release 2 (SVR2) 推出。 4.2 BSD推出1987 SVR3 和 4.3BSD 推出1988 POSIX.1 發(fā)布。OSF 和 UI成立1989 SVR4 推出1991 Linus Torvalds 推出 Linux1992 SVR4.2 (USL)推出。 4.4 BSD推出(最后版) USL并入Novell發(fā)布 SVR4.2MP(最后版) 和UNIXWA
15、RE1995 X/Open 推出 Unx95 UNIXWARE 賣給SCO(Santa Cruz Operation)1996 Open Group 成立1998 Open Group 推出 UNIX981998 DEC公司(連同Digital UNIX)被Compag收購1999 Linux 2.2 內(nèi)核發(fā)布2001 Linux 2.4 內(nèi)核發(fā)布,AT&TV6(1975),V7(1
16、978),SystemIII(1981),SystemV.1(1983),SystemV.4(1989),UNIXWARE(Novell1992)(SCO 1995),UNIXWARE7.0 (1997),MicroSoftXenix(1980),XenixV(1988),SCO Unix(1989),,Open Server5.0(1995),MINIX(1987)(A.S.Tanenb
17、aum),Linux(LinusTorvalds1991),U C Berkeley BSD(1978),4.1BSD(1981)TCP/IP,4.2BSD(1984),4.3BSD(1987),4.4BSD(1992),V8(1983),V9(1987),V10(1988),Plan9(1990),SUNSUNOS(1984),SUNOS4(1989),SUNOS5Solaris2(1992),Sola
18、ris8(1999),DECUltrix,,OSFOSF/1(1990),Digital UNIX(DEC 1995Compag 1998),TRu64 UNIX(1999),IBMAIX(1986),HPHP_UX(1986),SGIIRIX(1990),CMUMach1988,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Open UNIX8(2001),,UNIX族系,Unix當(dāng)前流行版本
19、,公司: Unix版本 /CPU型號(hào) SUN: Solaris /SPARC,IntelHP: HP-UX /PA-RISCIBM: AIX /PowerPC Compaq: Tru64 UNIX /AlphaSCO: UnixWare7.0 ,Open Server / IntelSGI: IRIX /MIPSGNU: Linux / CISC(Intel, MC68000),
20、 RISC(SPARC,Alpha,Mips),Unix優(yōu)點(diǎn)和缺點(diǎn),Unix優(yōu)點(diǎn) 設(shè)計(jì)精湛: 小核心和大量實(shí)用工具(用管道和shell組合)簡單小巧的文件系統(tǒng)(字節(jié)流文件)系統(tǒng)使用文本數(shù)據(jù)(便于管理)I/O的文件表示便于I/O重定向(設(shè)備獨(dú)立性)可移植性(c語言) Unix缺點(diǎn)I/O庫復(fù)雜用戶接口不方便(描述過于簡單)積木
21、式工具要求程序員有豐富的想象力和創(chuàng)造力版本太多內(nèi)核設(shè)計(jì)復(fù)雜,UNIX標(biāo)準(zhǔn)化,兩大標(biāo)準(zhǔn)化國際組織:Posix, Open group Posix (Portable Operating System Inteface)組織1980 usr/group成立(制定標(biāo)準(zhǔn))1985 usr/group 標(biāo)準(zhǔn)委員會(huì)并入 IEEE P10031988 發(fā)布 posix p1003.1 C 語言Unix核心接口:
22、 進(jìn)程原語(fork,exec,signal,timer,...) 進(jìn)程環(huán)境(uid, process group,...) 文件和目錄(I/O函數(shù)), 終端I/O 系統(tǒng)數(shù)據(jù)庫(passwd, group文件,..
23、.) 檔案格式(tar, cpio,...)1990 IEEE std 1003.1 – 1990 即 ISO/IEC 9945 - 1 part 1 : System Application Program Interface(API) [C language],,ISO: International Standardization Organization
24、 IEC: International Electrotechnical Commision1992 IEEE std 1003.2 – 1992 part 2 : shell and utilities (posix2) 基于 System V Bourne Shell, 100多 utilities1993 IEEE std 1003.1b
25、– 1993 來自IEEE P1003.4 實(shí)時(shí)擴(kuò)充 文件同步 異步IO 信號(hào)量 存儲(chǔ)管理(mmap, shared memory)
26、 執(zhí)行調(diào)度 clock and timer 消息隊(duì)列1996 IEEE std 1003.1b – 1996 包括‘: 1003.1 -- 1990(base API) 1003.1b -- 1993(realtime extens
27、ions) 1003.1c -- 1995(pthreads – posix thread) 1003.1i -- 1995(technical corrections to 1003.1b)1996 上述標(biāo)準(zhǔn)并入 ISO/IEC9945 – 1; 1996 (posix1)1997 1003.1g(原1003.12) Draft 6.6 (網(wǎng)絡(luò)),Open group 組
28、織1984 X/open company 成立。 廠家組織,采用而不制定標(biāo)準(zhǔn)1989 出版 X/open Portability Guide, issue 3 (XPG3)1992 出版 XPG 41994 出版 XPG 4, version 2 別名:spec 1170 X/open Single Unix Specificat
29、ion Unix951996 Open group成立(X/open 與 OSF 合并) OSF (Open Software Fundation – 1988 )1997 出版 X/open Single Unix Specification version 2 即 Unix 98,Linux簡史,Andre
30、w S.Tanenbaum , Vrije University in Amsterdam ,The Netherland. Minix – mini-UNIX, a small UNIX-like operating system for operating systems courses. Linus Torvalds, 1991.5.14 V 0.01
31、 80386, 簡單VM, Minix FS 1994.3.14 V 1.0 Network: TCP/IP socket ,Ethernet/ppp/slip 增加FS ,擴(kuò)展VM (分頁,文件映射) IPC, 簡單的Dynamically loadable Kernel Module 1995.3 V 1.2 1 – major主版本號(hào),
32、 2 – minor次版本號(hào)。 奇數(shù):開發(fā)中; 偶數(shù): 穩(wěn)定產(chǎn)品 IPX 協(xié)議, IP記賬與防火墻 多種硬件支持,1996.6 V 2.0 major 2 :多種體系結(jié)構(gòu)和多CPU(Alpha, M68000, Sparc,…) 網(wǎng)絡(luò)改進(jìn): TCP/IP 性能改進(jìn),AppleTalk, ISDN, AX.25(Amateur Radio Networki
33、ng) Remote Netware, SMB Automatic Loading of Module on demand1999 V2.22001 V2.4,Linux優(yōu)點(diǎn)和缺點(diǎn),Linux優(yōu)點(diǎn)多用戶多任務(wù)的32位系統(tǒng)Xwindows(圖形界面)工業(yè)標(biāo)準(zhǔn)支持TCP/IP協(xié)議虛擬內(nèi)存和共享庫支持unix商業(yè)版本的功能支持GNU系列軟件: 如 GNU C, CCIEEE POSIX 標(biāo)準(zhǔn)便宜
34、內(nèi)核源代碼公開多種硬件支持網(wǎng)絡(luò)功能Linux缺點(diǎn)缺乏文檔沒有及時(shí)的技術(shù)支持安裝升級(jí)不方便,二。系統(tǒng)結(jié)構(gòu),Unix系統(tǒng)總體結(jié)構(gòu) 系統(tǒng)初啟和進(jìn)程樹 文件系統(tǒng)結(jié)構(gòu)Unix運(yùn)行環(huán)境,系統(tǒng)調(diào)用入口表,Shell,核心程序,GUI,實(shí)用程序和應(yīng)用程序,中斷向量表 設(shè)備開關(guān)表,硬件,,,,,,,,,,,,,,,,,系統(tǒng)調(diào)用接口,硬件接口,,字符界面,圖形界面,用戶態(tài),核心態(tài),Unix系統(tǒng)總體結(jié)構(gòu),,,,,,系統(tǒng)初啟和進(jìn)程樹,,,
35、,,,,Rom,,proc1,proc0,main,start,/etc/init,Sh,Sh,lpd,cron,$,$,inetd,Master分區(qū)表,boot,Windows,boot,Unix,,,windows分區(qū),unix分區(qū),,,,用戶區(qū),核心區(qū),內(nèi)存,/etc/inittab,fork,,exec,ftpd,httpd,telnetd,,daemon,,,,文件系統(tǒng)結(jié)構(gòu),,,,,,,,,,,,,,,,,,root,boot
36、,Vmlinux(linux核心),etc,bin,sbin,lib,usr,var,home,bin,sbin,,,,,,,liu ……wang,tmp,dev,,,,,,mnt,proc,,,tty1,lp0,,,,,,,,,,,,注冊(cè)用戶目錄,設(shè)備文件,root用戶目錄,內(nèi)存文件,/ 根目錄,被安裝的文件系統(tǒng),系 統(tǒng) 命 令 文 件,臨時(shí)文件,變化文件,庫文件,系統(tǒng)文件,,,,,CRT,,keybord,UNIX
37、SERVER,TTY,PC,PC,M,PSTN,M,TTY/PC,PC,Router,Dial server,Termserver,遠(yuǎn)程網(wǎng),Router,PSTN,PSTN,PC,PC,TTY,PC,控制臺(tái),,,,,,網(wǎng)卡,多端口卡,,,,,,啞終端或PC仿真(串口),啞終端,撥號(hào)上網(wǎng),FtpTelnetSmtpHttp客戶機(jī)或仿真終端,PPP,PPP,TCP/IP,Unix運(yùn)行環(huán)境,,,,,,LAN,,LAN,串口,
38、,,三。核心結(jié)構(gòu),Unix核心 Linux核心 現(xiàn)代Unix版本 現(xiàn)代Unix核心框架,,,,,,,,,,,,,,,,,,,,,,,,,,,,用戶級(jí),核心級(jí),硬件級(jí),核心級(jí),trap,trap,I/O,進(jìn)程,(單塊結(jié)構(gòu)monolithic),Unix核心,系統(tǒng)調(diào)用界面,程序庫,硬件,硬件控制,driver,字符設(shè)備,塊設(shè)備,cache,文件系統(tǒng),用戶程序,IPC,調(diào)度,存儲(chǔ)管理,,,,,用戶級(jí),核心級(jí),硬件級(jí),核心級(jí),,,,,,,
39、,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Linux核心,用戶程序,系統(tǒng)調(diào)用界面,VFS,內(nèi)存,進(jìn)程,SOCKET,FS,FS,FS,driver,TCP/IP,Diskdriver,Flopydriver,DISK,FLOPY,Ether Card,Ether carddriver,現(xiàn)代Unix版本,,,傳統(tǒng)版本,現(xiàn)代版本,SVR3,4.2BSD→4.3BSD,SVR4 → UNIXWARE (搶占點(diǎn)核心)(
40、1989) (集成NETWARE),4.4BSD(最終) → FreeBSD ……(1993),Mach 2.5 → Mach3.0 (微內(nèi)核, 線程)(1988),Solaris 2.X (線程,可搶占核心)(1992),OSF/1 → Digital → TRU64(微內(nèi)核,線程(1990) UNIX UNIX 可搶占核心),,,SUN OS,,,,Ultrix
41、,,,,,,可執(zhí)行文件格式開關(guān)表,vnodeVFS,調(diào)度框架,塊設(shè)備開關(guān)表,虛存框架,streams,公共例程,-------靈活框架,,,,,,,a.out,coff,(executable and linkable format),,,,文件映射,設(shè)備映射,匿名映射,,,,磁盤driver,磁帶driver,,,網(wǎng)絡(luò)driver,終端driver,,,分時(shí)進(jìn)程,實(shí)時(shí)進(jìn)程,系統(tǒng)進(jìn)程,,,,NFS,RFS,FFS
42、,S5FS,,,,,現(xiàn)代Unix核心框架,elf,四。中斷與系統(tǒng)調(diào)用,中斷分類中斷處理與中斷棧用戶程序與系統(tǒng)調(diào)用,中斷分類,中斷分類,,,外中斷(來自CPU 以外的事件),內(nèi)中斷(來自CPU),訪管指令,捕俘(trap),,OS處理(核心中斷處理程序),,OS處理核心系統(tǒng)調(diào)用程序,,用戶處理,,。系統(tǒng)調(diào)用是核心與應(yīng)用程序的接口;外中斷(簡稱中斷)則是核心與硬件的接口。但系統(tǒng)調(diào)用也是通過硬件中斷實(shí)現(xiàn)的。。操作系統(tǒng)核心不允許使
43、用系統(tǒng)調(diào)用,也不允許產(chǎn)生捕俘,可以產(chǎn)生外中斷。,,,CPU,保留現(xiàn)場轉(zhuǎn)移恢復(fù)現(xiàn)場,,外中斷處理,捕俘處理,系統(tǒng)調(diào)用處理,,,,,,,,,中斷向量表,中斷總控程序,系統(tǒng)調(diào)用入口表,,OS核心程序,中斷處理程序( OS核心),,,,,,用戶編寫的處理程序,外設(shè),被中斷用戶程序,,,,,,,,,,,,,,,,,,,,,,,,,處理程序入口表,中斷處理與中斷棧,中斷處理過程:保留返回地址-----壓入下推棧保留其它寄存器
44、-----壓入下推棧中斷處理恢復(fù)其它寄存器-----彈出下推?;謴?fù)返回地址-----彈出下推棧中斷棧 在許多系統(tǒng)中,中斷處理程序把當(dāng)前進(jìn)程的核心棧用作中斷棧;另外一些系統(tǒng)的中斷處理則使用獨(dú)立的全系統(tǒng)惟一的中斷棧。其中每個(gè)棧區(qū)(幀,frame)對(duì)應(yīng)一個(gè)嵌套發(fā)生的中斷。,,機(jī)器錯(cuò)誤,時(shí)鐘,磁盤,網(wǎng)絡(luò)設(shè)備,終端,軟件中斷,高優(yōu)先級(jí),低優(yōu)先級(jí),,,,典型的中斷級(jí),,內(nèi)核上下文層3,時(shí)鐘中斷處理程序,保留的磁盤處理程序寄存器
45、上下文,,磁盤中斷處理程序,保留的系統(tǒng)調(diào)用程序寄存器上下文,,系統(tǒng)調(diào)用程序,保留的用戶程序寄存器上下文,內(nèi)核上下文層2,內(nèi)核上下文層1,,,,,,,時(shí)鐘中斷,磁盤中斷,系統(tǒng)調(diào)用,用戶程序,中斷的例子,,上下文層0,(虛設(shè)用戶層),中斷棧,中斷棧中的各層棧區(qū)代表處理機(jī)在一段時(shí)間內(nèi)運(yùn)行的環(huán)境,有時(shí)被稱為上下文層。各層的次序反映了中斷優(yōu)先級(jí)的高低。,用戶程序與系統(tǒng)調(diào)用,,,open,creat,read,write,中斷總控,系統(tǒng)調(diào)
46、用分類處理,open,creat,read,write,,,,,open,creat,,,copy,,,,,read,write,a.out,或elf,,,,,,,,,,,,,,可執(zhí)行目標(biāo)代碼,進(jìn)程映象,cc,exec,,copy(),main(),核心函數(shù),庫函數(shù),文件,內(nèi)存,系統(tǒng)調(diào)用實(shí)現(xiàn)算法,系統(tǒng)調(diào)用算法:輸入:系統(tǒng)調(diào)用編號(hào)輸出:系統(tǒng)調(diào)用結(jié)果算法:1。在系統(tǒng)調(diào)用入口表中找到對(duì)應(yīng)系統(tǒng)調(diào)用編號(hào)的表項(xiàng);2。按表項(xiàng)中指定的
47、參數(shù)數(shù)目,將參數(shù)從用戶地址空間拷貝到u區(qū);3。為非正常返回保留當(dāng)前上下文(針對(duì)慢系統(tǒng)調(diào)用,見后面);4。調(diào)用內(nèi)核中的系統(tǒng)調(diào)用函數(shù);5。如執(zhí)行有錯(cuò)則將錯(cuò)誤號(hào)寫入用戶寄存器r0, ps進(jìn)位位為1;6。否則,用戶寄存器r0,r1 中填入系統(tǒng)調(diào)用返回值。,例1. 系統(tǒng)調(diào)用實(shí)現(xiàn)舉例,源程序:char filename[ ] = “file”;main(){int fd;fd = creat( filenam
48、e, 0666);} 此源程序編譯后生成可執(zhí)行目標(biāo)代碼,其匯編代碼如下頁所示。 主程序main 調(diào)用的creat() 是個(gè)庫函數(shù),后者要通過trap 指令調(diào)用creat 的系統(tǒng)調(diào)用核心函數(shù)。其系統(tǒng)調(diào)用編號(hào)(功能號(hào))為8。 系統(tǒng)調(diào)用如出錯(cuò)返回則處理機(jī)狀態(tài)寄存器的進(jìn)位位為1,返回值為-1,出錯(cuò)碼保存在一指定單元中(extern int errno),Motorola 68000 匯
49、編代碼地址 指令58:mov&0x1b6, (%sp)#參數(shù)0x1b6 (0666)進(jìn)棧 5e:mov&0x204, -(%sp)#filename地址(0x204)進(jìn)棧64:jsr0x7a#調(diào)用creat庫函數(shù)6a:#86: rts 返回至此# 以下為creat庫函數(shù)7a:movq&0x8, %d0#0x8 對(duì)應(yīng) creat ,送寄存
50、器d07c:trap&0x0#os 撲俘7e:bcc&0x6#如進(jìn)位位為0(系統(tǒng)調(diào)用正確)則轉(zhuǎn)8680:jmp0x13c#否則(系統(tǒng)調(diào)用出錯(cuò))轉(zhuǎn)13c86:rts#creat庫函數(shù)返回至6a# 以下為系統(tǒng)調(diào)用出錯(cuò)處理13c:mov%d0, &0x20e#寄存器d0送地址20e(出錯(cuò)碼)142:movq&-0x1, %d0#-1 送至寄存
51、器d0(返回值)144:mova%d0, %a0#146:rts# creat庫函數(shù)返回至6a,用戶棧與核心棧結(jié)構(gòu),,,,0x1b6 204 6a,,用戶棧,參數(shù)0666filename地址204,,creat調(diào)用系列保留的寄存器,,pc = 7e ps值 sp值 d0 = 8(其它寄存器值),核心棧,,,棧指針sp,,,,,(rts 返回至此),,保留用
52、戶的寄存器上下文,,五。程序員界面,程序開發(fā)步驟程序結(jié)構(gòu)命令行自變量的傳遞文件系統(tǒng)界面進(jìn)程環(huán)境,程序開發(fā)步驟,編寫源程序 $ vi編譯連接 $ cc執(zhí)行目標(biāo)程序$ a.out,$vi,main(),編譯,,連接,,$cc,exec裝入運(yùn)行,,header,,,,,,data,text,a.out,.c,.o,stack,,text,data,目標(biāo)文件,例2. 顯示自變量,源程序ech.c:main (int argc
53、, char *argv[]){ int i; for(i=0; i<argc; i++) printf(“%s\n”, argv[i]); exit(0);},,,,“自變量1”,“自變量2”,0,1,2,argv[],,,,“程序名”,,,argc = 3,來自命令行,編譯連接運(yùn)行,$ vi ech.c$ cc –o ech ech.c ( $ cc –o ech ech.c 2>error )
54、$ ech hello world執(zhí)行結(jié)果 $ ech hello world ech hello world $,目標(biāo)程序結(jié)構(gòu),user functionor library,main(),start(),核心,exit(3),_exit(2),,,,,,,,,,,,,,,,,用戶編寫的函數(shù),,庫函數(shù),,可執(zhí)行文件目標(biāo)代碼,編譯連接,,,,,可執(zhí)行文件格式,安
55、裝指示信息段數(shù)寄存器初值,段類型大小虛地址,…,段類型大小虛地址,正文,數(shù)據(jù),...,其它信息,文件頭段頭1段頭n段1段2..,,,命令行自變量的傳遞,源程序 ech.cmain(int argc, char **argv){ int i; for(i=0; i<argc; i++) printf(“%s\n”, argv[i]);}執(zhí)行結(jié)果$ ech hello
56、world ech hello world,,“ech”,,,“hello”,“world”,argv[],0,1,2,argc=3,,shell送入,,,,,,,,,printf讀出并顯示,文件系統(tǒng)界面,系統(tǒng)調(diào)用拷貝文件舉例,系統(tǒng)調(diào)用,打開文件 int open (const char *pathname, int oflag,…/* , mode_t mode */); 按ofl
57、ag指定的方式打開pathname 指定的文件,返回文件描述字;建立文件 int creat (const char *pathname , mode_t mode ); 建立名字為 pathname 屬性為mode 的文件,然后對(duì)其按只寫方式打開,返回文件描 述字;讀文件 ssize_t read (int fd, void *buff, size_t nbytes);
58、 從文件中文件指針開始讀nbytes字節(jié)到buff指定的內(nèi)存區(qū),返回實(shí)際讀的字節(jié)數(shù)。寫文件 ssize_t write (int fd, void *buff, size_t nbytes); 從buff指定的內(nèi)存區(qū)寫nbytes到從文件指針開始的文件中,返回實(shí)際寫的字節(jié)數(shù)。關(guān)閉文件 int close (int fd) ; 關(guān)閉由文件描述符 fd 指定的文件。,拷貝文件舉例,$ c
59、c –o fcopy copy.c$ fcopy oldfile newfile,,,,,“copy”,“newfile”,argv[0],argv[1],argv[2],open(argv[1],..),creat(argv[2],…),fcopy,“oldfile”,,,,例3. copy 程序,char buffer[2048]; /* 源程序 copy.c */main(int argc, char **arg
60、v){ int fdold, fdnew; fdold = open(argv[1], 0); fdnew = creat(argv[2], 0666); copy(fdold, fdnew); exit(0);}copy(int old, int new){ int count; while( (count = read(old, buffer, sizeof(buffer)) )>0)
61、 write(new, buffer, count);},,,,,,,,,,,,,,oldfile,newfile,,,,,buffer[2048],進(jìn)程環(huán)境,fork 系統(tǒng)調(diào)用exec 系統(tǒng)調(diào)用exit 與 wait 系統(tǒng)調(diào)用,fork,pid_t fork(void)返回值 >0:父進(jìn)程 =0:子進(jìn)程 <0:系統(tǒng)調(diào)用出錯(cuò)(進(jìn)
62、程太多或存儲(chǔ)不夠)if ((pid = fork()) == 0) {……子進(jìn)程…….} 父進(jìn)程switch (( pid = fork() )){ case –1: 出錯(cuò) case 0: 子進(jìn)程 default: 父進(jìn)程},fork(),,,,父進(jìn)程,子進(jìn)程,,出錯(cuò),建立子進(jìn)程 子進(jìn)程是父進(jìn)程的復(fù)制品,正文段共享,數(shù)據(jù)段復(fù)制。,>0,=0,-1,例4. 變量復(fù)制
63、,int i=1; if(fork()==0){printf(“i=%d\n”,i);i=2;printf(“i=%d\n”,i); /* 打印子進(jìn)程全局變量 i */exit(0);}printf(“i=%d\n”,i); /* 打印父進(jìn)程全局變量 i */,int i=1;……if (fork()==0)
64、{ printf(…i); i=2; exit(0);} printf(…i);,,,,子進(jìn)程,,父進(jìn)程,,數(shù)據(jù),編譯,,子:i=2,父:i=1,,,,1,,,1->2,,父數(shù)據(jù),子數(shù)據(jù),i:,i:,,,fork拷貝,父子共享text,,初值:i=1,,例5. 共享程序,int i=1;if(fork()==0){printf(“i=%d\n”,i);i=2;
65、 /* 子進(jìn)程全局變量 i */}printf(“i=%d\n”,i); /* 父子進(jìn)程全局變量 i 的各自副本 */,exec,執(zhí)行文件 將可執(zhí)行目標(biāo)文件裝入進(jìn)程虛擬空間,傳入自變量并立即執(zhí)行。int execlp( char *filename, char *arg0, … (char *) 0);filename: 要執(zhí)行的文件名;char *arg0,… :傳遞給執(zhí)行文件中程序的自變
66、量;(char *) 0:自變量表末尾標(biāo)志。,,,,,進(jìn)程虛存,要執(zhí)行的目標(biāo)文件,,,,bss,stack,text,data,文件頭,,,,text,data,,,,,,,,exec,,例6. 執(zhí)行命令,如下程序可執(zhí)行任意指定的命令(文件):main(int argc, char * argv[]) /*a.c*/ {execlp(argv[2], 0);/* 在PATH中查找argv[2]并執(zhí)行之
67、*/} 在當(dāng)前目錄下生成并執(zhí)行目標(biāo)代碼文件a.out$ cc a.c $ ./a.out date ls --- 命令行 argv[0] argv[1] argv[2] --- 對(duì)應(yīng)的main 參數(shù)execlp(argv[2], 0) 執(zhí)行l(wèi)s命令(在PATH中查找ls),,,,“./a.out”,“date”,“l(fā)s”,0,1,2,argv[],,,,exit 與wait,
68、終止進(jìn)程 exit( int status );等待子進(jìn)程 pid_t wait ( int * sloc);,fork(),,,父進(jìn)程,子進(jìn)程,,wait ( int * sloc),exit ( int status ),sleep(),wakeup(),,喚醒,,,sloc,*sloc,status,,復(fù)制,,,,,pid_t pid1, pid2: int status;
69、 if((pid1=fork())==0) { /* 建立的子進(jìn)程 */ exit(1); } pid2 = wait(&status);………….. printf(“pid1 = %d,\n”, pid1); /* pid1=子進(jìn)程號(hào) */printf(“pid2 = %d,\n”, pid2)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- unix系統(tǒng)操作入門
- unix系統(tǒng)調(diào)用大全
- unix系統(tǒng)命令使用
- unix 系統(tǒng)操作命令大全
- unix系統(tǒng)的io模型
- unix操作系統(tǒng)基礎(chǔ)
- unix操作系統(tǒng)命令大全
- unix教程
- unix課程設(shè)計(jì)--java學(xué)生管理系統(tǒng)
- 常用unix命令
- unix系統(tǒng)的發(fā)展和研究現(xiàn)狀new
- linux-unix系統(tǒng)編程手冊(cè)(上、下冊(cè))-
- unix命令大全
- 銀行UNIX前置機(jī)系統(tǒng)安全設(shè)計(jì).pdf
- 模擬unix文件系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)
- UNIX系統(tǒng)新型運(yùn)輸協(xié)議實(shí)現(xiàn)及研究.pdf
- unix編譯工具(解密)
- unix命令大全74793
- unix的shell命令詳解
- unix系統(tǒng)開發(fā)-靜態(tài)庫和動(dòng)態(tài)庫的建立
評(píng)論
0/150
提交評(píng)論