1、UNIX操作系统最根本的功能特征是什么?包括哪些最基本的概念(动态/静态)?
(1)UNIX操作系统最根本的特征:分时多用户、开放性。
(2)分时多用户:多个用户多个进程同时在一个系统中运行,系统资源高度共享、有效协调(并发)
(3)开放性:
1)标准化:结构上的一致性
2)可移植性:应用软件的编码及系统应用接口
3)可互操作性:可保持用户原来的使用习惯,异种机之间的互操作
2、UNIX系统假设底层硬件的工作方式是什么?
假设机器硬件只支持的运行状态,且假设UNIX系统上进程的执行分成两种状态:用户态:进程正在执行用户代码时的状态。核心态:进程正在执行系统代码(系统调用)时的状态
3、操作系统核心是什么?核心通过什么方式和什么原则向上层应用程序提供了哪些服务?
(1)系统调用的集合及实现系统调用的内部算法,形成操作系统核心(内核)
(2)核心通过系统调用(以函数形式提供给核外的命令和上层应用系统使用的一组程序,涵盖操作系统的所有功能。是应用程序请求操作系统服务的唯一通道)的方式和透明原则(特点),向上层提供了五种主要的服务,也是UNIX核心的五个重要组成部分。
文件系统管理 | 文件管理和存储空间管理 |
I/O设备管理 | 核心->缓冲->块设备(随机存取设备) 核心->原始设备(raw设备,字符设备,裸设备) 对I/O设备进行有控制的存取 |
进程控制 | 进程的调度、同步和通讯 |
存储管理 | 在主存与二级存储之间对程序进行搬迁 |
时钟管理 | 把cpu的时间分配给当前最高优先权的进程 |
4、数据缓冲区高速缓冲建立的基础和原则是什么?要解决的根本问题是什么?这样设置高速缓冲有什么优缺点?
(1)建立一个被称为数据缓冲区高速缓冲的内部数据缓冲池,缓冲池设计的基本原则为:1)存放有刚使用过的数据尽量长时间地保留在内存中,以便马上还要使用时能在内存中找到。2)需要腾出内存空间时,把很久未使用过的数据交换到磁盘上去。这些数据马上还要使用的可能性最小。
(2)要解决的根本问题:文件系统和物理硬盘之间的数据同步:1)磁盘机械运行速度大大低于处理机的运行速度;2)多进程并发执行,少量磁盘I/O成为瓶颈;3)数据访问具有随机性,磁盘忙闲不均。
(3)数据缓冲区高速缓冲的优缺点
优点 | (1)提供了对磁盘块的统一的存取方法 (2)消除了用户对用户缓冲区中数据的特殊对齐的需要 (3)减少了磁盘访问的次数,提高了系统的整体I/O效率 (4)有助于保持文件系统的完整性 |
缺点 | (1)数据未即时写盘带来的风险 (2)额外的数据拷贝过程,大量数据传输时影响性能 |
5、多个进程在并行运行或串行运行时,与缓冲池的设置有什么关联影响?缓冲区设置的方式与数量对系统性能可能有哪些影响?
(1)串行:多个任务执行时,一个任务执行完再执行另一个。并行:两个或者多个事件在同一时刻发生,而并发是指两个或者多个事件在同一时间间隔发生。缓冲池的引入是为了缓和 CPU 与 I/O 设备间速度不匹配的矛盾,减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制;来提高 CPU 和 I/O 设备之间的并行性。
(2)性能影响:一个系统能够有益地配置的缓冲区的数目受到主存总量的限制,它必须保证正在执行的诸进程有够用的主存。如果缓冲区占用了过多的主存,则系统会因过量的进程对换或调换页而慢下来。
6、UNIX系统中的中断包括了哪些类别?处理各类中断的基本流程是什么?
(1)中断的分类:
硬件中断 | 来自时钟和各种外部设备 |
可编程中断 | 来自“软件中断”指令 |
例外中断 | 中断的特例,来自页面错误 |
(2)核心处理中断的操作顺序
保护现场 | 保存当前进程的上下文 |
确定中断源 | 根据中断向量查找中断处理程序 |
调用中断处理程序 | 完成处理任务 |
中断返回 | 恢复被中断程序的上下文 |
7、系统调用的基本实现方式是什么?
系统调用分为三个阶段,分别是参数准备阶段、系统调用识别阶段、系统调用执行阶段。
在参数准备阶段,程序将系统调用所需要的参数压到栈上。然后,用户程序调用库函数将系统调用的代码放在一个寄存器里,通过陷入将控制权交给操作系统。操作系统获得控制权后,将系统调用代码从寄存器里取出,与系统调用表进行比较,获得程序体所在的内存地址。之后跳到该地址,执行系统调用函数。系统调用执行完毕后返回到用户程序。
8、在操作系统中设置不同的处理机执行级别的目的是什么?通常系统中设置了哪些中断级别?
(1)目的:用一组特权指令给处理机设置一个执行级,以屏蔽同级和低级的中断,最大限度地减少其它事件的干扰, 使当前任务顺利执行并尽快完成;但开放更高级的中断,以响应更紧迫的请求
(2)中断级别
9、什么是纯代码编程?纯代码编程的好处是什么?
纯代码编程:可重入代码(Reentry code)也叫纯代码(Pure code)是一种允许多个进程同时访问的代码。为了使各进程所执行的代码完全相同,故不允许任何进程对其进行修改。程序在运行过程中可以被打断,并由开始处再次执行,并且在合理的范围内(多次重入,而不造成堆栈溢出等其他问题),程序可以在被打断处继续执行,且执行结果不受影响。
10、操作系统中包括了哪些构建原语?他们的基本功能是什么?他们的基本实现流程是什么?如何用他们来构建更大的功能模块?
操作系统中包含的构建原语:
基本功能 | 基本实现流程 | 构建更大功能模块 | |
(1)输入输出重定向 | (1)输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。 (2)输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。 |
程序内部:简单功能划分;纯代码设计 | |
(2)管道 | 进程之间交互的通道,是一系列将标准输入输出链接起来的进程,其中每一个进程的输出被直 接作为下一个进程的输入 | 程序外部:使用构件原语进行功能重叠和组装 |
(1)输入输出重定向的构建:
1)fork一个子进程,后续步骤都在子进程中完成,父进程通过waitpid()系统调用等待子进程结束
2)打开open()系统调用打开in.txt和out.txt,得到它们的描述符
3)通过dup2()系统调用把STDIN重定向到fd_in,把STDOUT重定向到fd_out(注意,重定向的影响范围是整个子进程);
4)通过system()系统调用运行shell命令
(2)管道
1)使用pip建立一个管道
2)使用fork建立一个子进程,共享管道读写
3)将进程标准输入改为管道读,另一个进程标准输出改为管道写
4)使用exec函数族运行所需要的程序
11、文件系统中划分数据块和数据片的目的是什么?其优缺点分别是什么?
划分数据块目的:提高传输速度,减少开销(overhead);
划分数据片目的:减少文件尾的碎片浪费。
12、UNIX的文件系统包括了哪些大的功能模块?什么是本地文件系统?什么是虚拟文件系统?设置虚拟文件系统的优缺点是什么?
(1)UNIX文件系统包括的功能模块:本地文件系统、网络文件系统、虚拟文件系统
(2)本地文件系统:UNIX系统中的基本文件系统,它通常固定存放在本地机器的存储设备上,任何一种结构形式的文件系统,都必然会直接或间接的与某个本地文件系统相联系。
(3)虚拟文件系统:是整个操作系统的用户界面,它给用户提供一个统一的文件系统使用接口,避免用户涉及各个子文件系统的特征部分。
(4)虚拟文件系统的优缺点:
1)设置虚拟文件系统的优点:这种方式使得整个文件系统结构统一,模块性强,增加功能非常方便;对用户来说,整个文件系统的透明性好,使用简便,避免了用户在对不同类型的文件或不同地点的文件系统进行操作时,分别来设置参数和安排操作过程。
2)设置虚拟文件系统的缺点:为了能够支持各种实际文件系统,VFS定义了所有文件系统都支持的基本的、概念上的接口和数据结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被Linux支持,就必须提供一个符合VFS标准的接口,才能与VFS协同工作。因此需要耗用一定的内存资源与硬件资源。
13、文件系统中目录的逻辑结构是什么样的?存储结构又是什么样的?这种结构对整个文件系统有什么影响和限制?定长目录项的目录结构与变长目录项的目录结构有什么区别?怎样通过目录结构来计算文件系统的容量?
(1)目录的逻辑结构:采用树形结构,一个逻辑文件系统就是一颗目录树。
(2)目录的存储结构:目录的存储结构为表状结构,其中包含若干表项,称为目录项。
(3)结构对文件系统的影响和限制:1)定长目录项在使用灵活方面有所不便,并且可能因为许多目录项名字长度不足14,造成浪费。2)变长目录项结构增加了算法复杂性和工作量,由于目录长度是变化的,因此必须在目录项中标明目录项的长度。通常用于硬件性能较高的大型系统中。
(4)目录结构计算文件系统的容量:实在是找不到答案,知道的小伙伴请放在评论区
14、资源保护系统以什么方式保护了哪些类型的资源?上锁机制的流程和特点是什么?在不同的应用场合如何选择或设定不同的上锁机制?
(1)资源保护系统:
1)通过quota系统提供的限量机制保护静态硬资源。
2)通过上锁机制保护动态资源
(2)上锁机制的流程和特点:
1)为了保持数据的一致性,能正常使用临界区资源,UNIX文件系统提供了一种对数据的上锁机制,即劝告锁,用户既可以给整个文件上锁,也可以给部分记录上锁。
2)劝告锁包含两种类型:共享锁(读操作锁)、互斥锁(写操作锁)
3)在同一个文件或同一个记录上同时只能有一个互斥锁,但可以同时有多个共享锁。共享锁的级别低于互斥锁,互斥锁可以覆盖共享锁。
4)进程在读写文件之前都必须先检查文件是否上锁,然后再进行相应的锁操作后才能对该文件进行读写。否则将使该文件上原有的所有劝告锁失效。
15、文件的i节点有什么样的特点和功能?在对文件进行打开、读写、关闭操作时对i节点进行了哪些操作?
(1)i节点的特点和功能:
特点 | (1)文件的内部名称(或代号),方便机器操作; (2)每个文件都有一个且只有一个inode与之对应; (3)inode存放文件的静态参数:存放地点、所有者、 文件类型、存取权限、文件大小等; (4)每个文件都可以有多个名字,但都映射到同一个 inode上; (5)各inode之间以inode号相区别; |
功能 | 为了找到某一个文件在存储空间中存放的位置,用i节点对一个文件进行索引。 |
(2)对i节点进行的操作
1)当一个文件被创建时,系统会分配一个 inode 给它,这样就将文件名和 inode 关联起来了,我们 可以将 inode 看做文件系统的内部名称。当用户或程序引用该文件时,系统就会通过该文件的文件名来查 找相应的 inode,然后通过 inode 来获取所需要的文件信息。也就是说在 UNIX 系统中文件名仅仅只是与 inode 相连,而不是与文件相连,这是和 Windows 系统中不同的一点。
2)分配活动索引节点
3)释放活动索引节点
4)逻辑位移量到文件系统块的映射
5)把路径名转换为索引节点
6)给新文件分配磁盘i节点
7)释放磁盘i节点
16、进程的生命周期中划分了哪几种状态?这几种状态之间是怎么转换的?状态转换的时机和条件是什么?
进程生命周期中状态划分:运行状态、就绪状态、睡眠状态。可以再细分为九部分。
①、进程在用户态下执行;
②、进程在核心态下执行;
③、进程已经准备好运行,在内存中就绪;
④、进程等待资源,在内存中睡眠;
⑤、进程处于就绪状态,因内存不足,被放在交换区上等待;
⑥、进程睡眠等待资源,因内存不足,被换到交换区上等待;
⑦、进程正从核心态返回用户态,但核心抢先于它做了上下 文切换,以调度另外一个进程;
⑧、进程处于刚被创建的状态,此时进程既没有处于就绪状 态,也没有进入睡眠状态;
⑨、进程执行了系统调用exit,处于僵死状态。此时进程刚消亡,并向父进程发送退出状态信息和计时统计信息。
17、进程调度的基本原则和方式是什么?对时间片长短的设定对系统效率的影响是什么?
(1)进程调度的基本原则和方式:
1)把每一次硬件时钟中断称为一个时钟“滴答”,由若干个时钟滴答构成一个时间片
2)核心给每一个用户进程分配一个时间片,当该进程的时间片用完后,核心抢先该进程并调度另外一个进程运行。一段时间以后,核心又会重新调度该进程继续运行下去
3)其中核心进程:运行在不可被抢先的状态下,或者睡眠在某个中断级别上。
(2)时间片长短的设定对系统效率的影响:缩短时间片可以提高系统实时性(响应速度),但是时间片如果设定的太小,系统会频繁切换进程进行运行,切换花费的时间较多,对于大作业任务不友好。时间片如果设定的太大,进程等待时间就越多,对小作业任务不友好。所以选择合适的时间片大小能够大大提升系统效率。
18、管道的实现机制什么?应用程序使用管道有什么好处和可能的不足?
(1)管道的实现机制:管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file 结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的。
(2)应用程序使用管道的优缺点:
优点 | (1)可以连接两个进程,进行进程之间的通信,不需要加锁,简单方便。 |
缺点 | (1)管道不适合多个子进程, (2)只能单向通信,双向通信需要建立两个管道。 |
19、如何使用软中断信号来实现进程间的同步和互斥?
(1)进程使用系统调用kill来发送软中断信号。
(2)kill(pid,signum),其中signum是要发送的软中断信号,pid为软中断信号接收进程,pid的值与对应进程关系如下。
pid为正值 | 信号发送给进程号为pid的进程 |
pid = 0 | 信号发送给与发送者同组的所有进程 |
pid = -1 | 信号发送给真正用户标识号等于发送者的有效用户标识号的所有进程 |
pid = 负值但不为-1 | 信号发送给组号为pid绝对值所有进程 |
(3)软中断信号的处理:进程在确认收到软中断信号后,有三种处理方式:
1)进程退出(exit)—— 缺省动作;
2)进程忽略信号,就像没有收到该信号一样;
3)进程收到信号后执行一个特殊的用户函数。通过系统调用 signal 来定义进程的动作
20、UNIX系统中的进程是如何调度的?进程的调度优先数是如何计算的?
(1)UNIX采用多级反馈循环调度算法:
1)核心给进程分配一个CPU时间片,抢先一个超过其时间片的进程,并把它反馈到若干优先级队列中的某一个队列上。
2)当进程的上下文切换结束时,核心执行schedule_process算法来调度一个进程,即从处于“在内存中就绪”和“被抢先”状态的进程中,选取优先权最高的就绪进程。
3)如果若干进程都具有相同的最高优先权,则核心选择在“就绪”状态时间最长的进程。
4)如果没有可运行的合格进程,核心则休闲等待,直到下次中断,下次中断最迟发生在下一个时钟滴答时。
(2)进程的调度优先数
1)进程的调度优先数priority = cpu使用量/2 + 基级用户优先权值 + (value)
2)系统调用nice用于调整一个进程的调度优先数,nice的值为value
3)对于普通用户来讲,value必须为正整数,因此使用nice后必然会使得调度优先数变大,导致进程优先度降低。
4)对于某些UNIX版本中,root用户可以把value值设为负值。
21、上层应用对普通文件和设备文件都是按相同的方式来访问的,但操作系统内部是如何分别按不同方式来执行对普通文件和设备文件的操作?
(1)核心从用户文件描述符的指针找到系统打开文件表项和文件的索引节点
(2)检查文件类型,根据需要存取块设备或字符设备开关表
(3)从索引节点中抽取主设备号和次设备号
(4)使用主设备号为索引值进入相应的开关表
(5)根据用户所发的系统调用来调用开关表中的对应函数
(6) 对设备文件的系统调用和对正规文件的系统调用之间的一个重要区别是:当核心执行驱动程序时,对设备文件的索引节点是不上锁的。
因为驱动程序会频繁的睡眠,以等待硬链接或数据的到来,因此核心不能确定一个进程要睡眠多长时间。
如果对设备文件的索引节点上锁,则其它存取此节点的进程,会因为本进程在驱动程序中睡眠,而无限期的等待下去。