加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX系统概论.ppt 82页

发布时间:2022-12-08 14:01:38 所属栏目:Unix 来源:转载
导读: UNIX操作系统设计与实现 目 录 参考文献 第一章 UNIX系统概论 第二章 文件系统 第三章 进程结构 第四章 进程调度 第五章 进程控制 第六章 信号与会话 第七章 虚拟存储器* 第八章 设备管

UNIX操作系统设计与实现 目 录 参考文献 第一章 UNIX系统概论 第二章 文件系统 第三章 进程结构 第四章 进程调度 第五章 进程控制 第六章 信号与会话 第七章 虚拟存储器* 第八章 设备管理* 第九章 进程通信 第十章 TCP/IP 与 socket接口 参考文献 1. M.J.Bach, The Design of the UNIX Operating System.Prentice Hall 1990. 人民邮电出版社 2003.UNIX 操作系统设计.机械工业出版社 2000.2. M.K.McKusick et al., The Design and Implementation ofthe 4.4 BSD UNIX Operating System.Addision-Wesley Reading, MA, 1996.4.4 BSD UNIX操作系统设计与实现. 电力出版社 2003.3. Uresh Vahalia, UNIX Internals –The New Frontiers.Prentice Hall 1996. 人民邮电出版社 2003.UNIX 高级教程 系统技术内幕. 清华大学出版社.1999. 4. John Lions, Lions’ Commentary on UNIX 6th Editionwith Source Code. Peer-to-Peer Communications, Inc. 1996.莱昂氏UNIX源代码分析. 机械工业出版社 2000. 5. Scott Maxwell, Linux Core Kernel Comentary.The Coriolis Group 2000.Linux内核源代码分析.机械工业出版社 2000. 6. D.P.Bovet & M.Cesati, Understanding the Linux Kernel.O’Reilly & Associates, Inc. 2001. 深入理解Linux内核.中国电力出版社 2001. 7. W.R.Stevens, Advanced Programming In the Unix Environment.Addsion Wesley 1992.Unix环境高级编程.机械工业出版社 2000. 8. W.R.Stevens, Unix Network Programming .vol I: Networking API:Socket and XTI(2nd).Prentice Hall 1998.Unix网络编程 第1卷: 连网的API,套接字与XTI.清华大学出版社 1998. 9. W.R.Stevens, Unix Network Programmingvol II: Interprocess Communications(2nd).Prentice Hall 1999.Unix网络编程 第2卷: 进程间通信.清华大学出版社 2000. 10. A.S.Tanenbaum, Computer Networks( 3rd Edition).Prentice Hall 1996 .计算机网络(第三版).清华大学出版社 1996. 11. Amir Afzal, Unix Unbounded A Beginning Approah .Prentice Hall 2003.Unix 初级教程(第四版). 电子工业出版社 2004. 第一章 UNIX系统概论 一。

历史与现状 二。系统结构 三。核心结构 四。中断与系统调用 五。程序员界面 六。面向对象的设计* 七。习题 一。历史与现状 Unix简史 Unix当前流行版本 Unix优点和缺点 Unix标准化 Linux简史 Linux优点和缺点Unix简史 1965-1969 Multics(Multiple Information ComputingService)US DOD ? MIT, AT&T Bell, GE 1970 Unix V1(PDP-7), AT&T Bell , K.Thompson,D.M.Ritchie 1970 Unix V2(B Language), K.Thompson 1972 C Language, D.M.Ritchie 1973 Unix V5 ( C ) 1973 ACM OS 原理会议 1974 CACM “The Unix Time Sharing System” 1975 Unix V6 发行源代码 1978 Unix V7 移植到不同机器上 1980 BSD 发行BSD4.0 ,Microsoft 发行XENIX 1981 AT&T System III (USG - UNIX System Group) 1983 AT&T System V (USG并入USL(UNIX System Laboratory)) 1983 D.M.Ritchie & K.Thompson获 ACM Turing 奖 1984 UNIX System V Release 2 (SVR2) 推出。

4.2 BSD推出 1987 SVR3 和 4.3BSD 推出 1988 POSIX.1 发布。OSF 和 UI成立 1989 SVR4 推出 1991 Linus Torvalds 推出 Linux 1992 SVR4.2 (USL)推出。 4.4 BSD推出(最后版)USL并入Novell发布 SVR4.2MP(最后版) 和UNIXWARE 1995 X/Open 推出 Unx95UNIXWARE 卖给SCO(Santa Cruz Operation) 1996 Open Group 成立 1998 Open Group 推出 UNIX98 1998 DEC公司(连同Digital UNIX)被Compag收购 1999 Linux 2.2 内核发布 2001 Linux 2.4 内核发布Unix当前流行版本公司:Unix版本 /CPU型号 SUN: Solaris /SPARC,Intel HP: HP-UX /PA-RISC IBM: AIX /PowerPC Compaq: Tru64 UNIX /Alpha SCO: UnixWare7.0 ,Open Server / Intel SGI: IRIX /MIPS GNU: Linux / CISC(Intel, MC68000),RISC(SPARC,Alpha,Mips)Unix优点和缺点 Unix优点 设计精湛: 小核心和大量实用工具(用管道和shell组合) 简单小巧的文件系统(字节流文件) 系统使用文本数据(便于管理) I/O的文件表示便于I/O重定向(设备独立性) 可移植性(c语言)Unix缺点 I/O库复杂 用户接口不方便(描述过于简单) 积木式工具要求程序员有丰富的想象力和创造力 版本太多 内核设计复杂UNIX标准化 两大标准化国际组织:Posix, Open groupPosix (Portable Operating System Inteface)组织 1980 usr/group成立(制定标准) 1985 usr/group 标准委员会并入 IEEE P1003 1988 发布 posix p1003.1 C 语言Unix核心接口:进程原语(fork,exec,signal,timer,...)进程环境(uid, process group,...)文件和目录(I/O函数),终端I/O系统数据库(passwd, group文件,...)档案格式(tar, cpio,...) 1990 IEEE std 1003.1 – 1990 即 ISO/IEC 9945 - 1part 1 : System Application Program Interface(API) [C language]ISO: International Standardization OrganizationIEC: International Electrotechnical Commision 1992 IEEE std 1003.2 – 1992 part 2 : shell and utilities (posix2)基于 System V Bourne Shell, 100多 utilities 1993 IEEE std 1003.1b – 1993 来自IEEE P1003.4 实时扩充文件同步异步IO信号量存储管理(mmap, shared memory)执行调度clock and timer消息队列 1996 IEEE std 1003.1b – 1996 包括‘:1003.1 -- 1990(base API)1003.1b -- 1993(realtime extensions)1003.1c -- 1995(pthreads – posix thread)1003.1i -- 1995(technical corrections to 1003.1b) 1996 上述标准并入ISO/IEC9945 – 1; 1996(posix1) 1997 1003.1g(原1003.12) Draft 6.6 (网络) Open group 组织 1984 X/open company 成立。

厂家组织,采用而不制定标准 1989 出版X/open Portability Guide, issue 3 (XPG3) 1992 出版XPG 4 1994 出版XPG 4, version 2别名:spec 1170X/open Single Unix SpecificationUnix95 1996 Open group成立(X/open 与 OSF合并) OSF (Open Software Fundation – 1988 ) 1997 出版 X/open Single Unix Specification version 2即 Unix 98Linux简史 Andrew S.Tanenbaum ,Vrije University in Amsterdam ,The Netherland.Minix – mini-UNIX, a small UNIX-like operating system foroperating systems courses. Linus Torvalds, 1991.5.14 V 0.0180386, 简单VM, Minix FS 1994.3.14 V 1.0Network: TCP/IP socket ,Ethernet/ppp/slip增加FS ,扩展VM (分页,文件映射)IPC, 简单的Dynamically loadable Kernel Module 1995.3 V 1.21 – major主版本号,2 – minor次版本号。

奇数:开发中; 偶数: 稳定产品IPX 协议,IP记账与防火墙多种硬件支持 1996.6 V 2.0major 2 :多种体系结构和多CPU(Alpha, M68000, Sparc,…)网络改进:TCP/IP 性能改进unix系统内幕,AppleTalk, ISDN,AX.25(Amateur Radio Networking)Remote Netware, SMBAutomatic Loading of Module on demand 1999 V2.2 2001 V2.4Linux优点和缺点 Linux优点 多用户多任务的32位系统 Xwindows(图形界面)工业标准 支持TCP/IP协议 虚拟内存和共享库 支持unix商业版本的功能 支持GNU系列软件: 如 GNU C, CC IEEE POSIX 标准 便宜 内核源代码公开 多种硬件支持 网络功能 Linux缺点 缺乏文档 没有及时的技术支持 安装升级不方便二。系统结构 Unix系统总体结构 系统初启和进程树 文件系统结构 Unix运行环境Unix系统总体结构系统初启和进程树文件系统结构Unix运行环境 三。核心结构 Unix核心 Linux核心 现代Unix版本 现代Unix核心框架Unix核心Linux核心现代Unix版本现代Unix核心框架 四。

中断与系统调用 中断分类 中断处理与中断栈 用户程序与系统调用中断分类中断处理与中断栈中断处理过程: 保留返回地址-----压入下推栈 保留其它寄存器-----压入下推栈 中断处理 恢复其它寄存器-----弹出下推栈 恢复返回地址-----弹出下推栈 中断栈 在许多系统中,中断处理程序把当前进程的核心栈用作中断栈;另外一些系统的中断处理则使用独立的全系统惟一的中断栈。其中每个栈区(帧,frame)对应一个嵌套发生的中断。用户程序与系统调用系统调用实现算法 系统调用算法: 输入:系统调用编号 输出:系统调用结果 算法: 1。在系统调用入口表中找到对应系统调用编号的表项; 2。按表项中指定的参数数目,将参数从用户地址空间拷贝到u区; 3。为非正常返回保留当前上下文(针对慢系统调用,见后面); 4。调用内核中的系统调用函数; 5。如执行有错则将错误号写入用户寄存器r0, ps进位位为1; 6。否则,用户寄存器r0,r1 中填入系统调用返回值。例1. 系统调用实现举例 源程序: char filename[ ] = “file”; main() { int fd; fd = creat( filename, 0666); }此源程序编译后生成可执行目标代码,其汇编代码如下页所示。

主程序main 调用的creat() 是个库函数,后者要通过trap 指令调用creat 的系统调用核心函数。其系统调用编号(功能号)为8。系统调用如出错返回则处理机状态寄存器的进位位为1,返回值为-1,出错码保存在一指定单元中(extern int errno) Motorola 68000 汇编代码 地址指令 58:mov&0x1b6, (%sp)#参数0x1b6 (0666)进栈 5e:mov&0x204, -(%sp)#filename地址(0x204)进栈 64:jsr0x7a#调用creat库函数 6a:#86: rts 返回至此 # 以下为creat库函数 7a:movq&0x8, %d0#0x8 对应 creat ,送寄存器d0 7c:trap&0x0#os 扑俘 7e:bcc&0x6#如进位位为0(系统调用正确)则转86 80:jmp0x13c#否则(系统调用出错)转13c 86:rts#creat库函数返回至6a # 以下为系统调用出错处理 13c:mov%d0, &0x20e#寄存器d0送地址20e(出错码) 142:movq&-0x1, %d0#-1 送至寄存器d0(返回值) 144:mova%d0, %a0# 146:rts# creat库函数返回至6a 用户栈与核心栈结构 五。

程序员界面 程序开发步骤 程序结构 命令行自变量的传递 文件系统界面 进程环境程序开发步骤 编写源程序 $ vi 编译连接 $ cc 执行目标程序$ a.out例2. 显示自变量 源程序ech.c: main (int argc, char *argv[]) { int i; for(i=0; ierror ) $ ech hello world 执行结果$ ech hello worldechhelloworld$目标程序结构可执行文件格式命令行自变量的传递 源程序 ech.c main(int argc, char **argv) { int i; for(i=0; i0)write(new, buffer, count); }进程环境 fork 系统调用 exec 系统调用 exit 与 wait 系统调用fork pid_t fork(void) 返回值 >0:父进程=0:子进程<0:系统调用出错(进程太多或存储不够) if ((pid = fork()) == 0){……子进程…….}父进程 switch (( pid = fork() )){case –1: 出错case 0: 子进程default: 父进程 }例4. 变量复制 int i=1;if(fork()==0) { printf(“i=%d\n”,i); i=2;printf(“i=%d\n”,i); /* 打印子进程全局变量 i */ exit(0); } printf(“i=%d\n”,i); /* 打印父进程全局变量 i */例5. 共享程序 int i=1; if(fork()==0) { printf(“i=%d\n”,i); i=2;/* 子进程全局变量 i */ } printf(“i=%d\n”,i); /* 父子进程全局变量 i 的各自副本 */exec 执行文件将可执行目标文件装入进程虚拟空间,传入自变量并立即执行。

int execlp( char *filename, char *arg0, … (char *) 0); filename: 要执行的文件名; char *arg0,… :传递给执行文件中程序的自变量; (char *) 0:自变量表末尾标志。例6. 执行命令 如下程序可执行任意指定的命令(文件): main(int argc, char * argv[])/*a.c*/ { execlp(argv[2], 0); /* 在PATH中查找argv[2]并执行之 */ } 在当前目录下生成并执行目标代码文件a.out $ cc a.c $ ./a.outdatels--- 命令行 argv[0] argv[1] argv[2] --- 对应的main 参数 execlp(argv[2], 0) 执行ls命令(在PATH中查找ls)exit 与wait 终止进程exit( int status ); 等待子进程pid_t wait ( int * sloc);例7. 进程终止与等待 pid_t pid1, pid2:int status;if((pid1=fork())==0){/* 建立的子进程 */exit(1);}pid2 = wait(&status); …………..printf(“pid1 = %d,\n”, pid1);/* pid1=子进程号 */ printf(“pid2 = %d,\n”, pid2);/* pid2= 等到的子进程号 */printf(“ i = %d \n”, status >> 8 );/* status=256*1 */例8.子进程执行文件 源程序 f.c main(int argc, char *argv[]) { if(fork()==0) execl(“/home/liurs/ech”, ”ech”, ”hello”, ”world”, 0); wait((int*)0); } 六。

面向对象的设计* 概述 对象的实现 接口的实现 操作系统设计概 述 基本概念 类(class): 包含数据成员域和函数成员集的复杂数据类型。 只有类的成员函数才可对类中的函数和数据进行操作。 类的成员(函数和数据)可以是公共的和私有的,只有公共成员才可对外部可见。 对象(object): 类的实例,分配有存储空间。 基类(base class)与子类(subclass):子类是从基类派生出来的,故也 叫派生类。子类从基类继承了所有的属性(数据和函数),子类可以在基类上加上或重载新的数据和函数,并给出其实现。子类的对象也是基类的对象,故子类的指针也是基类的指针。 虚函数(virturl function): 在基类中声明而在子类中实现的函数。 纯虚函数(pure virturl function): 虚函数c++ 的实现(=0)。 抽象基类(abstract class): 含有至少一个纯虚函数的基类。 纯抽象基类(pure abstract class): 只含有纯虚函数的基类,可用于实现组件的接口。 包含(containment:) 一个对象含有指向另一个对象的指针。 面向对象技术的特征: 封装性(encapsulation):对象内的数据和函数只能通过接口函数访问。

继承性(inheritance):基类中的数据和函数可由子类所拥有。 多态性(polymorphism): 一种(函数)接口,多种(对象)实现。 面向对象技术的优点: 更好地组织复杂性。通过继承性可以有效地定义有关概念,通过包含可以构造复杂的数据结构; 减低软件开发代价。通过重用其他人开发的对象类可减少编写,测试和维护软件的时间; 便于系统的扩展和维护。在采用对象构造的系统中,软件各成分之间的联系比较松散,一个成分的修改对整个系统影响有限;对象的实现 函数的继承接口的实现 对象中的函数表在组件技术中叫做接口(interface), 接口在组件技术(CORBA,COM/DCOM)中是一个关键的概念,一般用纯抽象基类实现。 通过接口继承可实现多态性。 以下是定义接口的C++代码: #define interface struct interface IX----纯抽象基类,不能生成实例 { virtual void _stdcall FX1() = 0;----纯虚函数 virtual void _stdcall FX2() = 0; virtual void _stdcall FX3() = 0; virtual void _stdcall FX4() = 0;};相同类相同接口 相同接口的同一类的对象实例共享接口函数表及函数本身。 class CA: public IX---类CA继承接口IX {public: // 实现接口 IX vitual void _stdcall Fx1() { count

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!