第1页:第十三章UNIX操作系统
- 第十三章UNIX操作系统
- 历史回顾(Historical Perspective)
- 系统结构(System Structure)
- 进程管理(Process Management)
- 存储管理(Memory Management)
- 文件系统(File System)
- 设备管理(Device Management)
- 系统调用(System Calls)
- 外壳语言(Shell)
第2页:13.1 历史回顾
- 1969年由美国Bell实验室的两名程序员K.Thompson和D.M.Ritchie设计;
- 最初该系统是采用汇编语言编写的.
- incorporated features of other operatingsystems, especially MULTICS.
- 后来二人专门为UNIX设计了C语言,并用它重新改写了UNIX中的大部分源代码,形成第三版.
第3页:13.1 历史回顾(续)
- 在70年代初期,UNIX在Bell实验室及许多大学中获得了广泛的应用,这也促进了UNIX系统的进一步发展.
- 1973年推出第五版
- 1976年推出第六版
- 1978年第七版正式发行.
- 由于UNIX结构良好,并被迅速地移植到Interdata8/32及VAX等机器上
第4页:13.1 历史回顾(续3)
第1版(1971)第3版(1973)第6版(1975)第7版第8版第9版SVR4(1989)IBM AIXSystemIII(1982)SystemV(1983)SVR2(1984)SVR3(1987)1BSD(1978)2BSD(1978)3BSD(1979)4.0BSD(1980)4.4BSD(1993)Sun Solaris第10版发展与版本:
第5页:13.2 系统结构系统进程
(#1),shell,…,shell,其它用户进程核外内核socket文件子系统进程控制网络协议设备文件目录与普通文件虚拟存储系统RawIO字符缓冲高速缓冲页缓冲网络设备驱动字符设备驱动块设备驱动内存管理处理机调度,同步机制硬件路由选择终端终端…UNIX系统组成
第6页:内核部分
- 内核部分
- 内核由两类模块构成–被动的,即普通模块–主动的,即进程模块
- 普通模块–进程控制–文件管理–存储管理–设备管理–原语管理–中断处理–处理机管理–系统初启
第7页:内核部分(续)
- 内核部分
- 进程模块–process #0交换进程(sched)–process #1初始进程(init)
- 交换进程及初始进程是两个系统进程,它们运行操作系统核心程序,完成操作系统的某些功能.
第8页:外壳部分
- 外壳部分
- 外壳部分运行命令解释程序,读入、解释并处理终端用户键入的命令.
- 将命令解释程序由操作系统核心中分离出来的好处在于:
- 缩减操作系统内核的规模
- 不同用户可以使用不同的外壳
第9页:13.3 进程管理
- 进程组成
- 进程控制块
- 进程状态与状态转换
- 进程调度
- 进程互斥
- 进程同步
- 进程通讯
第10页:13.3.1 进程组成
(映像)Proc结构Text结构系统空间用户空间User结构系统栈进程堆栈进程数据进程代码常驻内存部分内外存交换部分系统空间
第11页:13.3.2 进程控制块
- Proc结构–所保存的信息无论当进程在内存时还是在外存时都是需要的.
- User结构–所保存的信息仅当进程在内存时才是需要的,因而可以与进程的程序一起被移到外存.
第12页:13.3.2 进程控制块(续)
struct proc{char p_stat;char p_flag;char p_pri;char p_sig;
第13页:13.3.2 进程控制块(续3)
struct user{int u_rsav[2]int u_fsav[25]……char u_uid;
第14页:13.3.2 进程控制块(续4)
int u_uisd[16];
第15页:13.3.2 进程控制块(续5)
struct text{int x_daddr;
第16页:13.3.2 进程控制块(续6)
3.3.3进程状态及其转换p_statedefine null 0define SSLEEP 1define SWAIT 2define SRUN 3define SIDL 4define SZOMB 5define SSTOP 6p_flagdefine SLOAD 01define SSYS 02define SLOCK 04define SSWAP 010define STRC 020define SWTED 040Subset of : {p_state}→{p_flag}→{system mode}
第17页:13.3.2 进程控制块(续7)
进程状态及其转换换出结束跟踪结束跟踪换入/出换出唤醒fork处理机分派跟踪等待终止置PSWSRUNLOADuserSRUNLOADkernelSIDL中断睡眠换出唤醒内存够内存不够SZOMBSSLEEPLOADSWAITLOADSRUNLOADSSTOPLOADSSLEEPSWAPSWAITSWAPSRUNSWAPSSTOPSWAP唤醒结束跟踪唤醒结束跟踪
第18页:13.3.4 进程调度
- 调度策略
- Dynamic Priority based(Low number high priority)
- Preemptive
- Aging (no starvation)
- 调度算法
- USER:100
- p_cpu:运行进程,每20ms加1;其它进程,每1200ms减10
- p_nice:用户进程:0~20,系统进程:-20~20
第19页:13.3.4 进程调度(续)
进程调度实现进程P(用户态)进程P(核心态)进程Q(核心态)进程Q(用户态)中断中断处理调度上下文切换置PC,PSW
第20页:13.3.5 进程互斥
- 经典UNIX系统
- 机制
- 关中断互斥(提高处理机优先级)
- 特点
- 简单
- 开销小
- 影响并发性
- 关中断后代码很短
第21页:13.3.6 进程同步
- 进程同步:–当一个进程因某种原因不能继续运行时,它便等待在某一个事件上,即将等待事件记在p_wchan变量上,进入SWAIT或SSLEEP状态–当对应事件发生时,系统唤醒等待于该事件上的所有进程
- 竞争条件:–事件发生可能先于等待.–事件将被丢失.
- 忙式等待–被唤醒进程可能再次等待
第22页:13.3.7 进程通讯
- 信号(signal)
- From process to process
- From event to process
- 管道(pipe)
- Unnamed file
- Named pipe
- socket通讯
- Endpoint communication
- Suitable for networkFew UNIX systemspermittedsharedmemorybecause thePDP-11 hardware didnot encourage it
第23页:信号(signal)
- 信号(signal)
- 特点
- 简单信号(类似软中断,共20个)
- 异步通讯
- 信号来源
- 异步事件
- key board interrupt, error, timer, etc.
- 进程,系统调用(如kill)
- from process to process, or from terminal toprocess
- 使用
- 信号处理程序的定义
- 信号的发送与接收
- 信号的处理
第24页:信号(signal)(续)
- 信号(signal)
- 信号处理程序的定义
- 系统调用signal(sig,func)预置,
- 其中sig为019的信号值,func为处理程序的地址.
- 该系统调用的作用是u_signal[sig]=func.
- 当func为0时接收信号进程终止自己;
- 当func为奇数时忽略信号;
- func为偶数时为处理程序入口.
- 进程初创时自动继承其父进程的信号处理程序.
第25页:信号(signal)(续3)
- 信号(signal)
- 信号的发送与接收
- 进程实际接收到的信号被记载在p_sig中.
- 由于p_sig常驻内存,因而在任何时刻均可接受到信号.
- 信号可能来自进程,也可能是事件,如键盘中断信号、错误、定时器.
- 处于等待状态的进程在接收到信号后一般将被唤醒.
第26页:信号(signal)(续4)
- 信号(signal)
- 信号的处理
- 接收到信号的进程在适当时刻(被调度选中由核态转到目态),发现p_sig中记录有接收到的信号,根据u_signal[p_sig]的值确定对信号的处理.
- 接收信号的进程也可以忽略信号(u_signal[p_sig]==奇数).对多数信号的缺省处理动作是终止收到信号的进程.
- 信号很象允许用户程序在目态处理的中断.
第27页:管道(Pipe)
- 管道(Pipe)
- 特点
- 经典UNIX最有特色的通讯机制;
- 单方向,流式通讯;
- 建立在文件基础上,与文件界面统一;实现极为简练;
- 速度问题:为防止两次I/O传输
- 限制pipe文件大小(4块)
- 缓冲技术
- 延迟写
第28页:管道(Pipes)
- 管道(Pipes)
- 使用方法:先创建管道,再创建进程—继承int fd[2];…pipe(fd)…p1=fork(); p2=fork();p1: write(fd[1],…); p2:read(fd[0],…)
第29页:套接字(socket)
- 套接字(socket)
- 端-端通讯机制
- (endpoint—endpoint)
- 类型
- Stream sockets
- Sequenced packet sockets
- Datagram sockets
- Reliably delivered message sockets
- Raw sockets
第30页:套接字(socket)(续)
- 套接字(socket)
- 地址域
- 使用中的socket与一地址相联系
- 地址的形式由通讯域(communicationdomain)确定.
- 同一域中的进程使用相同地址格式
- address format
- 4.3BSD域
- UNIX domain (AF_UNIX)
- the Internet domain (AF_INET)
- the XEROX Network Service (NS) domain(AF_NS)
第31页:13.4 存储管理
- 经典UNIX存储管理
- 一个进程两个对界
- Text(共享)
- Data(私用)
- 内外存不同尺寸,同一管理程序(FF算法)
- Core: 64bytes
- swap: 512bytes
- 交换技术
- swapping
第32页:13.4.1 存储管理方式
- 采用界地址存储管理方式
- 一个进程由两个对界组成,即占有两个连续的内存区域
- 一个区域用于保存共享代码
- 另个区域用于保存私用数据及用户堆栈
- 存储分配的基本单位是64个字节,而不是单个字节
第33页:13.4.2 存储分配算法
- 内存空间及外存交换区的分配均是动态的,分配算法为最先适应(FF).
- 描述内存空间及外存空间分配状况各需有一个数据结构.
- 内存的分配与外存的分配共用同一个程序.
第34页:13.4.3 进程空间扩充
- 堆栈分配
- 基本长度,避免浪费
- 堆栈溢出
- 动态扩展
- 申请一个新的数据区(原区域大小+增加大小)
- 复制
- 释放原有区域
- 内存不够
- 交换到外存(同时扩展空间)
- 释放所占内存
- 再次由sched调入内存时,按新长度
第35页:13.4.4 交换技术
- (swapping)
- 交换目标:缓解内存紧张矛盾
- 交换进程:sched(#0)
- 交换算法
- 移入外存中SRUN状态进程
- 如内存不够,选择移出
- 内存中处于SWAIT或SSTOP状态进程
- 如还不够,选择移出
- 内存中处于SSLEEP或SRUN状态进程,条件
- 待移入进程在外时间>=3秒
- 待移出进程在内时间>=2秒
第36页:13.4.5 虚拟页式
- (Paging)
- 4.3BSD UNIX:demand-paging+swapping
- 主要依赖(first paging)
- 其次是交换(secondary swapping).
- 偷页进程(Page stealer process)
- 动态跟踪并调整进程页架数
- 基于工作集模型(working set model).
- If theschedulerdecides that the pagingsystem is overloaded, processes will beswapped outwholeuntil the overload isrelieved.
第37页:页面置换
- 页面置换
- pagedaemonprocess
- Uses a modifiedsecond-chancepage-replacement algorithm.
- Second chance: a variant of NUR.8/11/02/06/14/15/07/03/1Set page 3,4reference bit to 0,replace page 50
第38页:页面置换(续)
- 页面置换
- pagedaemonprocess
- Uses a modifiedsecond-chancepage-replacement algorithm.
- Second chance: a variant of NUR.8/11/02/06/14/15/07/03/1Set page 3,4reference bit to 0,replace page 500
第39页:页面置换(续3)
- 页面置换
- pagedaemonprocess
- Uses a modifiedsecond-chancepage-replacement algorithm.
- Second chance: a variant of NUR.8/11/02/06/14/15/07/03/1Set page 3,4reference bit to 0,replace page 5100
第40页:13.5 UNIX文件系统
- 3.5 UNIX文件系统
- 文件类型
- 文件体系
- 文件结构
- 文件目录
- 文件系统映射
- 文件卷安装
- 磁盘空间管理
- Inode区管理
- 快速文件系统
- NFS文件系统
第41页:13.5.1 文件类型
- 普通文件
- 内容可以是程序、数据、图象等,保存在磁盘块中
- 目录文件
- (文件名,文件号)序列,保存在磁盘块中
- 特殊文件
- 设备
- 设备作为文件管理的好处
- 界面统一,使用文件与使用设备命令相同,申请设备open,释放close,读read,写write
- 利用文件保护功能可以保护设备
第42页:13.5.2 文件体系
- 基本结构:树型
- 系统目录,系统文件
- 用户目录,用户文件
- 连接(link)
- 不是真正的树,而呈格结构
- 连接方便文件共享
第43页:13.5.3 文件结构
- 逻辑结构
- 流式文件,字节序列
- 读写命令中包含字节数
- read(fd,buf,count)
- 其中count为传输字节数
- 模拟记录式文件
- 物理结构
- 直接与间接
- 0级,1级,2级,3级间接寻块
第44页:13.5.4 文件目录与连接
- 目录项
- 相当FCB次部
- 形式为(文件名,文件号)
- Inode
- 相当于FCB主部
- 每个inode有一个i_number
- 多个文件名对应同一个i_number(连接共享)
第45页:13.5.4 文件目录与连接(续)
连接实现userswanglif1f2i_number=15f2 15f1 15link(“/users/wang/d1/f1”,“/users/li/f2”)d1
第46页:13.5.5 文件系统映射
read(4,…)read(4,…)…write(2,…)用户空间u_ofileu_ofilefilei_node磁盘空间系统空间...数据块……...i_list
第47页:13.5.5 文件系统映射(续)
相关表目1.u_ofile (每进程一个)struct user{…int u_ofile[NOFILE];…}#define NOFILE 152.file (系统一个)struct file{char f_flag;
第48页:3.Inode表(系统一个)
3.Inode表(系统一个)struct inode{int i_flag;char i_count;char i_dev;char i_number;char i_mode;char i_nlink;char i_uid;char i_gid;char i_size0;char *i_size1;int i_addr[8];int i_lastr;}inode[NINODE];表间联系:u_ofile→file(n) (1)file→inode(n) (1)相关表目
第49页:13.5.6 文件卷的安装
- mount:用一个文件卷的根目录取代一个已经存在的空目录节点UNIX文件卷0 1 2…k k+1…n-1导引块特殊块inode区域每块16个inode,从0起依次编号文件存储区域(普通文件,目录文件)
第50页:13.5.6 文件卷的安装(续)
- 超级块
- 块1#(super block):–(1)记载文件卷上k+1块到n-1块中所有空闲块,–(2)inode区中100个空闲inode. (缓冲)–文件安装(mount)后超级块读入内存。–注:占用区域已经记载在各个文件的inode中。
第51页:13.5.6 文件卷的安装(续3)
Struct filesys {int s_isize;
第52页:13.5.7 磁盘空间管理
:100个空闲块为一组,组之间相互链接。…s_nfree=100s_free[0]s_free[1]...s_free[99]...Super block...............特点:速度快,空间省。
第53页:13.5.8空闲inode管理
3.5.8空闲inode管理:s_inode最多可以记载100个空闲inode(编号)申请时:(1)s_ninode>0,取s_inode[--s_ninode];(2) s_ninode=0,由磁盘inode区顺取100个空闲I节点(i_nlink=0)将其编号填入s_inode表中,修改s_ninode,然后分配。释放时:(1)s_ninode<100, s_inode[s_ninode++]=i_number (释放的);(2)s_ninode=100,丢弃。
第54页:13.5.9 快速文件系统
- 经典UNIX文件系统
- Inode区与内容存储区相分离
- 查找速度慢(引臂在inode区与块存储区之间往复移动,尤其长路径名)
- 文件长度大于5120字节:间接寻块
- 文件名长度14字节以内
- Fast File System(FFS)
- 1984UC Berkeley
- 被许多现代UNIX采用,包括4.3BSD
- 效率提高一个数量级
第55页:13.5.9 快速文件系统(续)
- 快速文件系统
- FFS将磁盘卷划分为若干个柱面组(cylindergroup),每个柱面组占若干连续的柱面,作为相对独立的文件卷管理
- FFS采用较大的磁盘块以减少I/O间址并提高I/O效率(达8KB)
- FFS打破了文件名长度最多为14字节的限制,文件名长度可达255字节
- FFS支持符号连接(symbolic link),这种连接可以跨文件卷或主机
第56页:13.5.9 快速文件系统(续3)
3.5.9快速文件系统UNIX 4.3BSD柱面组数据块数据块Super blockCylinder blockInode
第57页:13.5.9 快速文件系统(续4)
- 0 NFS网络文件系统
- NFS体系结构
- 每个站点相对独立文件目录树
- 不同站点目录树之间可以安装
- 协议
- 远程安装协议(不透明)
- 远程存取协议(透明)
- NFS实现
- UNIX界面
- VFS层
第58页:13.5.9 快速文件系统(续5)
远程安装/binvicplssh/dbabcded1ed2binmntubinusrliuworkclient1client2server1server2db1db2
第59页:NFS安装协议
- NFS安装协议
- 建立client与server之间的初始联系
- 安装参数包括
- 远程待安装目录
- 服务器名
- 安装请求被映射为对应的RPC调用,并传给远程server
- 服务器端的export list指明可被安装目录列表,以及可对其执行安装操作的clients
第60页:NFS安装协议(续)
- NFS安装协议
- 安装成功后,服务器返回文件把柄(filehandle),供以后使用
- 把柄:(文件系统标识,inode标识)
- 安装后,远程目录成为本地目录子树,以后可以本地方式访问
- 安装操作只改变client的视图,但不影响server端
第61页:NFS存取协议
- NFS存取协议
- 提供一套RPC调用,执行如下操作:–查找目录下的文件–读取目录项目–操作link与目录–存取文件属性–读写文件
第62页:NFS存取协议(续)
- NFS存取协议
- NFS是无状态的(stateless):–文件服务端并不在内存打开文件表中保持文件控制信息–每个文件操作命令必须是自包含的(selfcontained),即必须提供完整的参数集合–NFS不提供并发控制机制.
第63页:NFS实现
- NFS实现
- 客户端VFS功能
- 识别本地文件与远程文件
- 对于远程文件,调用NFS协议过程
- 对于本地文件,区分本地文件系统类型,并根据文件类型激活相应文件操作
- VFS保持一个vnode表,记录所有打开文件信息。对于远程打开文件,在NFS中保持一个r_node表,vnode通过把柄与r-node建立联系。
- 服务器端VFS功能
- 实现NFS协议,接受来自客户端的调用并将其传递给本地FS
第64页:NFS实现(续)
- NFS实现
- 对远程文件的操作映射过程
- 客户端通过系统调用发出访问请求
- 操作系统将其映射到对应vnode的一个VFS操作
- VFS层鉴别为远程文件,调用NFS对应的过程
- NFS向远程服务器发出RPC调用
- 远程服务器识别为本地文件,启用对应的文件操作
- 按相同路径将调用结果由服务器反向传给顾客
第65页:2 网络客户机端核心服务器端核心
NFS实现界面VFSFATFSExt2FSNFSclient缓冲driverdriverRPC消息disk1disk2VFSFATFSExt2FSNFSserver缓冲driverdriverRPC消息disk1disk