1.22k likes | 1.5k Views
第九章 UNIX 操作系统. 9.1 UNIX 系统概述 9.1.1 UNIX 系统的发展 发展历史 1965 年 由 AT&T , MIT 和 GE 联合开发 Multics ( Multiplexed Information and Computing Service) 1969 年 Ken Thompson 和 Dennis Ritchie 在 PDP7 上用汇编语言开发出 UNIX. 1970 年 在 PDP-11 系列机上 (11/20 , 11/40 , 11/45) 用汇编开发出 UNIX v.1 。在此过程中,
E N D
9.1 UNIX 系统概述 • 9.1.1 UNIX 系统的发展 • 发展历史 1965年 由AT&T,MIT和GE联合开发Multics ( Multiplexed Information and Computing Service) 1969年 Ken Thompson 和 Dennis Ritchie在PDP7上用汇编语言开发出UNIX
1970年 在PDP-11系列机上(11/20,11/40,11/45) 用汇编开发出UNIX v.1。在此过程中, 机器的硬件逐渐复杂,UNIX所支持的特 征也不断丰富,增加了文字处理程序。 1975年 发表UNIX v.6 并广泛扩散到大学和科研 单位, 为后期发展奠定了良好的基础 1978年 优化后发布UNIX v.7 --- UNIX的第一个 商业版本 ---- 我国开始研究应用的最早版本
1981年 AT&T发布UNIX System III, 完全转向为 社会提供的商品软件 1983年 AT&T发布UNIX System V, 系统功能已 趋于稳定和完善. 此后System V又有一系 列的公布号: 1.0/2.0/2.3/3.5/4.0/4.2 等, 现在最后版本为 System V Release 4(SVRV)
9.1.2 有代表性的其它版本 • 加州大学伯克利分校的BSD (Berkeley Software Distribution)版本, 主要用于工 程设计和科学计算 • Microsoft和SCO公司开发的SCO XENIX SCO UNIX 和 OpenServer等, 主要应用 在基于Inter x86体系结构的系统上 • 开放源代码的Linux, UNIX的体系结构加 MS Windows形式的图形用户界面,主要 应用在基于Inter x86体系结构的系统上
9.1.3 UNIX系统特征 • 可移植性强 . UNIX操作系统大量代码为C语言编写 . C语言具有跨平台特性 2. 多用户、多任务的分时系统 . 人机间实时交互数据 . 多个用户可同时使用一台主机 . 每个用户可同时执行多个任务 3. 软件复用 . 每个程序模块完成单一的功能 . 程序模块可按需任意组合 . 较高的系统和应用开发效率
与设备独立的输入/输出操作 . 打印机、终端视为文件 . 输入/输出操作与设备独立 • 界面方便高效 . 内部: 系统调用丰富高效 . 外部: shell命令灵活方便可编程 . 应用: GUI 清晰直观功能强大 • 安全机制完善 . 口令、权限、加密等措施完善 . 抗病毒结构 . 误操作的局限和自动恢复功能
多国语言支持 . 支持全世界现有的几十种主要语言 • 网络和资源共享 . 内部: 多进程结构易于资源共享 . 外部: 支持多种网络协议 • 系统工具和系统服务 .100多个系统工具(即命令),完成 各种功能 .系统服务用于系统管理和维护
9.1.4 UNIX系统组成 计算机系统有四大资源---处理机、存储器、文件、设备
一、 UNIX系统核心的结构 捕俘 用户程序 库函数 用户级 核心级 SHELL 系统调用接口 UNIX核心的框图 进程控制 子系统 文件子系统 进程间 通信 调度 高速缓存 存储管理 字符设备 块设备 设备驱动程序 硬件控制 核心级 硬件级 硬件
二、Unix系统的组成 • UNIX可分为四个层次。最低层是硬件,它是整个系统的基础;次低层是OS核心;其次是OS与用户的接口SHELL、编译程序等;最高层是用户程序。 • 内核:是Unix系统的核心部分,能与硬件直接交互,常驻内存。
驻留(基本)模块:完成输入/输出、文件、设备、内存和处理器时钟的管理,常驻内存。驻留(基本)模块:完成输入/输出、文件、设备、内存和处理器时钟的管理,常驻内存。 • 系统工具:通常称为shell。是Unix操作系统的一部分,是用户与Unix交互的一种接口。常驻磁盘,在用户登录时即调入内存。
三、进程控制子系统 • 进程控制子系统负责管理处理机、存储器。它的功能有: • 1、进程控制---应用程序利用系统调用fork创建一个新进程;利用系统调用exec执行一个满足条件的进程;利用系统调用exit结束一个程序的执行。
2、进程通信 • 3、存储器管理 • 4、进程调度---将满足运行条件的程序(进程)调入内存,安排一个时间片。
四、文件子系统 • 文件子系统负责文件、设备资源的管理。它的功能有: • 1、文件管理 • 2、高速缓冲机制---设置多个缓冲区以匹配I/O的速度。 • 3、设备驱动程序
主机 Login: getty Unix 内核 getty Login: init getty Login: 9.1.5 Uinx操作系统的启动流程
boot 产生1号进程init 装入OS内核 执行inittab 硬件检查 初始化各端口 安装rootfs getty getty 形成0号进程 子 登录 产生子进程 执行命令 父 对换进程swap 退出
9.1.6 用户分类和用户职责 • 一、用户分类 • 1、超级用户 • 2、普通用户 • 二、职责
9.1.8 用户登录与退出 • 超级用户:通过“root”登录 • 退出命令: • 1、shutdown or • 2、haltsys • 普通用户:通过自己的UID登录 • 退出命令: • exit or Ctrl+d
9.2 文件管理 • UNIX的文件系统的功能很强,又很灵活。 • UNIX文件系统的概述 • 1、特点: • 文件的组织是分树形结构---是倒树形结构。每个用户可以建立自己的文件系统。 • 文件的物理结构为混合索引式文件结构---文件的物理结构可能包括多种索引文件结构形式(单级索引、两级索引和多级索引文件结构形式。这种物理结构查询速度快、节省存放文件地址所需的空间。
采用了成组链接法管理空闲盘块---是空闲表法和空闲链法的产物,提高了查找空闲盘块的速度,节省了存放盘块号的存储空间。采用了成组链接法管理空闲盘块---是空闲表法和空闲链法的产物,提高了查找空闲盘块的速度,节省了存放盘块号的存储空间。 • 引入了索引结点的概念---在UNIX系统中,把文件名和文件的说明分开,即分别作为目录文件和索引结点表中的一个表项,这样既可提高文件的检索速度,又能减轻通道的I/O压力。
2、文件系统的特点 • 由于文件名和文件属性(说明)分开存放,文件属性构成文件的索引结点,这使UNIX的目录项与一般文件系统的目录项不 • 同,故UNIX文件系统的结构与一般的文件有所差异。应该是按文件的用途和类别存放。 • 下面的图中,根目录中的bin是二进制系统文件的子目录;usr是用户文件的根目录;dev是特殊文件的根目录。
root目录表 i i i dev的目录表 usr的目录表 bin的目录表 i i
3、文件系统的资源管理 • 为了在系统中保存一份文件,就需花费资源,当文件处于“未打开”状态时,文件需占用三种资源: • 一个目录项---用以记录文件的名称和对应索引结点的编号; • 一个磁盘索引结点项---用以记录文件的属性和说明信息(在磁盘上); • 若干个盘块---用于保存文件本身。 • 当文件处于“打开”状态时,须增加三种资源:
一个磁盘索引结点项---用以记录文件的属性和说明信息(在磁盘上);一个磁盘索引结点项---用以记录文件的属性和说明信息(在磁盘上); • 若干个盘块---用于保存文件本身。 • 当文件处于“打开”状态时,须增加三种资源:
一个内存索引结点项(驻留内存); • 文件表中的一个登记项; • 用户文件扫描符表中的一个登记项。 • 由于对文件的读写管理,必须涉及上述资源,所以对文件的管理就包括: • 对索引点的管理 • 对空闲盘块的管理 • 对文件目录的管理 • 对文件表和描述符表的管理 • 对文件的使用。
9.3 进程的描述 在UNIX系统中,采用段页式存储管理方式(段称为区---Region).一个进程实体由若干个区组成(程序区、数据区、栈区、共享存储区),每个区可分若干页。UNIX中为每个进程配置一个进程控制块(PCB)用于控制和管理进程。PCB由四部分组成。
1、进程表项(核心数据) • 2、U区(扩充信息) • 3、进程区表(存放段的起地址始、指向系统区表中对应区表项的指针) • 4、系统区表项(存放各个段在物理存储器中的位置)
9.2.1 进程的数据结构(PCB) • 一、进程表项(Process Table Entry):包含如下的内容: • 1、进程标识符(PID) 是唯一标识进程的某一整数; • 2、用户标识符(UID) 是标识拥有该进程的用户;
3、进程状态 表示该进程的当前状态; • 4、事件描述符 记录使进程进入睡眠状态的事件; • 5、进程和U区在内存或外存的地址,核心可利用这些信息做上、下文切换;
6、软中断信号 记录其它进程发来的软中断信号; • 7、计时域 给出进程的执行时间和对资源的利用情况; • 8、进程的大小 核心根据进程的大小来为其分配存储空间;
9、偏置值nice(加权系数) 供计算该进程的优先数时用,用户可自定; • 10、P_Link 指向就绪队列中下一个PCB的指针; • 11、指向U区进程正文、数据及栈在内存区域的指针。
二、U区(U Area) • 每个进程都有一个私用的U区,其中包含内容: • 1、进程表项指针 指向当前(正在执行)进程的进程表项; • 2、真正用户标识符u-ruid(real user ID)它是超级用户分配给普通用户的标识符,以后每次用户登录进入系统时,均必须输入此标识符;
3、有效用户标识符u-euid(effective user ID)可用系统调用setuid改变为其它用户,以获得对该用户的文件访问权; • 4、用户文件描述符表 记录该进程已打开的所有文件; • 5、当前目录和当前根 给进程的文件系统环境
6、计时器 记录进程在核心态和用户态的运行时间; • 7、内部I/O参数 给出要传输的数据量,源(或目标)数据的地址,文件的输入/输出偏移量; • 8、限制字段 指对进程的大小及其“写”的文件大小的限制。
三、系统区表(System Region Table) • 系统V把一个进程的虚地址空间划分为若干个连接的逻辑区:正文区、数据区、栈区等。这些区是可被共享和保护的独立体。多个进程可共享一个区。例如:多个进程共享一个正文区,即几个进程将执行同一个程序;同样,多个进程也可共享一个数据区。为了对区进行管理,在核心中设置了一个系统区表,以记录区的有关信息: • 1、区的类型和大小; • 2、区的状态 (一个区有:锁住、在请求、在装入过程中、有效---区已装入内存); • 3、区在物理存储器中的位置; • 4、引用指针 共享该区的进程数; • 5、指向文件索引结点的指针
四、本进程区表(Per Process Region Table) • 为了记录进程的每个区在进程中的虚地址,并通过它找到该区在物理存储器中的实地址,系统为每个进程配置了一张进程区表。表中每一项记录一个区的起始虚地址及指向系统区表中对应的区表项。这样,核心通过查找进程区表项和系统区表,便可将该区的逻辑地址转换为物理地址。这里使用两张表实现是便于区的共享。 • 下图说明了其过程: • A、B两个进程的进程区表和系统区表。在A进程区表中的正文区、数据区和栈区的指针,分别指向相应于a、b、c区的系统区表项。B进程区表中的正文区、数据区和栈区,分别指向相应于a、d、e三个系统区表项,由于A 和B进程共享正文区,所以它们都指向同一个正文区a。
进程区表项、系统区表项和区的关系 A进程区表 正文 数据 栈 a b c d e a A、B共享正文区 b c d B进程区表 正文 数据 栈 e 系统区表
本进程区表 系统区表 U区 a b c • 进程的数据结构: 进程表 c a b
9.2.2 进程状态及其转换 • 一、进程状态 • UNIX中,把进程执行状态分为两种(用户态执行、系统态执行),前者是进程正处于用户状态中执行,运行可被中断;后者是核心状态执行(系统调用→中断后便进入核心状态)运行不能中断。为进程设置了九种状态: • 1、核心态执行 • 2、用户态执行 • 3、内存中就绪
4、被剥夺状态 • 5、就绪/换出 • 6、内存中睡眠 • 7、睡眠/换出 • 8、创建状态---在父进程执行fork系统调用创建子进程期间,新被创建的子进程便处于“僵死”状态; • 9、僵死状态---在执行exit系统调用后的状态。
进程状态的转换 系统调用 中断 用户态 执行 中断 中断返回 5 僵死 9 返回 返回到用户态 4 剥夺 核心态 执行 被剥夺 调度 8 睡眠 2 内存中就绪 唤醒 6 内存中 睡眠 换出 内存足 换入 创建fork 1 换出 内存不足 3 就绪/换出 唤醒 7 睡眠/ 换出
二、 进程映像 • 在UNIX系统中,进程是进程映像(Process Image)的执行过程。进程映像也就是正在执行的进程实体。它由三部分组成:用户级上、下文,寄存器上、下文和系统级上、下文。 • 一、用户级上、下文:主要是用户程序,它在系统中分为正文区和数据区。正文区是只读的,主要是一些程序。在进程执行时,可利用用户栈区保存中间结果。
二、寄存器上、下文 • 由CPU中的如下寄存器构成: • 1、程序寄存器 存放CPU要执行的下条指令的虚地址; • 2、处理机状态寄存器(PSR) 其中包括运行方式(用户态、系统态)、处理机当前的运行级等相关信息; • 3、栈指针 • 4、通用寄存器
三、系统级上、下文 • 其中包括OS为进程管理该进程所用的信息: • 1、静态部分---在进程的整个生命期中,系统级上、下文大小保持不变,它由三部分组成: • 进程表项 每个进程占一个表项(记录进程的状态等相关信息) • U区 • 进程区表项、系统区表项、页表,用于实现进程的虚地址到物理地址的映射。 • 2、动态部分---是可变的,它包括: • 核心栈; • 若干层寄存器上、下文。
上、下文动态部分 上、下文静态部分 核心栈第3层 第2层的保护的 寄存器上、下文 核心栈第3层 第2层的保护的 寄存器上、下文 核心栈第3层 第2层的保护的 寄存器上、下文 核心上、下文0层 用户级上、下文 进程正文 数据 栈 共享数据 系统级上、下文静态部分 进程表项 U区 本进程区表 进程上、下文的组成
9.2.3 进程的控制 • 在UNIX系统中,只设置了进程,它是一个独立拥有资源、独立调度的基本单位。 • UNIX系统中的系统调用有: • 1、fork---创建一个新进程 • 2、exec---改变进程的原有代码 • 3、exit---实现进程的自我终止 • 4、wait---将调用进程挂起,等待子进程终止 • 5、getpid---获取进程标识符 • 6、nice---改变进程的优先级。
一、fork系统调用: • 在UNIX系统中,只有0进程是在系统引导时被创建的,在系统初启时由0进程创建1进程,以后0进程变为对换进程,1进程成为系统中的始祖进程。UNIX利用fork为每个终端创建一子进程为用户服务(如:等待用户登录、执行shell命令解释程序等)。每个终端又可用fork来创建其子进程,从而形成一棵进程树。系统中除0进程外的所有进程都是用fork创建的。fork的系统调用格式: • int fork(); • fork系统调用设有参数,如果执行成功,则创建一个子进程。
核心为fork完成如下操作: • 1、为新进程分配一进程表项和进程标识符; • 2、检查同时运行的进程数目; • 3、拷贝进程表项中的数据; • 4、子进程继承父进程的所有文件; • 5、为子进程创建进程上、下文; • 6、子进程执行。
二、exec系统调用: • fork系统调用只是将父进程的用户级上、下文拷贝到新进程中,而exec系统调用将可执行的二进制文件覆盖在新进程的用户级上、下文的存储空间。exec系统完成的操作: • 1、对可执行文件进行检查; • 2、回收内存空间; • 3、分配存储空间; • 4、拷贝参数。