操作系统拾遗(奇数篇)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


第一章

程序接口,图像接口,命令接口
程序接口、图像接口和命令接口都是计算机软件开发中常见的接口类型。
程序接口(API)
程序接口,也称为应用程序接口(Application Programming Interface,API),是一组定义了程序之间如何相互通信的规则、协议和工具的集合。它允许程序员使用预定义的函数或方法来访问应用程序的功能。例如,操作系统提供API,以使得开发人员能够编写程序来访问操作系统的功能。
图像接口
图像界面(Image User Interface,IUI)是指用于创建软件应用程序的一组图像工具。这些工具使开发人员能够创建具有图形用户界面(GUI)的应用程序,包括按钮、菜单和对话框等元素。例如,Java Swing库提供了一套图像工具,用于创建基于Java的GUI应用程序。
命令接口
命令行界面(Command line interface,CLI)是指通过文本命令来进行交互的用户界面。它由一组指令和参数组成,在命令行提示符下输入命令和参数即可执行对应操作。命令行界面通常用于操作系统的管理和维护,也经常用于开发人员和系统管理员的工作中。例如,Linux中的Shell就是一种命令行界面。

操作系统接口主要有命令接口和程序接口(也称系统调用)。库函数是高级语言中提供的与系统调用对应的函数(也有些库函数与系统调用无关),目的是隐藏“访管”指令的细节,使系统调用更为方便、抽象。但是,库函数属于用户程序而非系统调用,是系统调用的上层。

操作系统的基本特点:并发、共享、虚拟、异步,其中最基本、一定要实现的是并发和共享。早期的多道批处理操作系统会将所有进程的数据全部调入主存,再让多道程序并发执行,即使不支持虚拟存储管理,也能实现“多道程序并发”,

库函数与系统调用的区别和联系
库函数是语言或应用程序的一部分,可以运行在用户空间中。而系统调用是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间中,而且许多库函数都会使用系统调用来实现功能。未使用系统调用的库函数,其执行效率通常要比系统调用的高。因为使用系统调用时,需要上下文的切换及状态的转换(由用户态转向核心态).

操作系统中用于记录状态信息的数据结构

  • 作业控制块(Job Control Block,JCB):是操作系统中用于管理作业的一种数据结构,它记录了作业的进程数、优先级、资源需求、状态等信息,以便于操作系统进行作业调度和资源分配。
  • 进程控制块(Process Control Block,PCB):是操作系统中用于管理进程的一种数据结构,分别用于记录进程的状态、优先级、指令计数器、寄存器、内存地址等信息,以便于操作系统进行进程调度和资源分配。
  • 设备控制块(Device Control Block,DCB):是操作系统中用于管理设备的一种数据结构,它记录了设备的类型、状态、当前使用情况等信息,以便于操作系统进行设备资源的分配和管理。
  • 空闲登记表(Free List):是操作系统中用于管理内存空闲块的一种数据结构,它记录了每个空闲块的大小、起始地址等信息,以便于操作系统进行内存分配和释放。
  • 内存分配表(Memory Allocation Table):是操作系统中用于记录内存分配情况的一种数据结构,它记录了每个进程所占用的内存空间,以便于操作系统进行内存管理和分配。
  • 消息队列(Message Queue):是操作系统中用于进程间通信的一种数据结构,它可以实现进程之间的同步和共享,以便于操作系统实现进程间的协作和数据交换。
  • 缓冲区(Buffer):是操作系统中用于缓存数据的一种数据结构,它用于暂存输入或输出的数据,以便于操作系统进行数据传输和处理。

通用操作系统使用时间片轮转调度算法,用户运行程序并不需要预先预订运行时间,操作系统执行程序时,必须从起始地址开始执行,编译器是操作系统的上层软件,不是操作系统需要提供的功能,操作系统是计算机资源的管理者,管理计算机系统资源是操作系统关心的主要问题.

中断处理流程的前三个步骤是由硬件直接实现(隐指令)的。地址映射中需要基地址(或页表)寄存器和地址加法器的支持。而在时钟管理中,需要硬件计数器保持时钟的运行。进程调度由调度算法决定CPU使用权,由操作系统实现,不需要硬件的支持。

计算机通过硬件完成操作系统由用户态到核心态的转换,这是通过中断机制来实现的。发生中断事件时(有可能是用户程序发出的系统调用),触发中断,硬件中断机制将计算机状态置为核心态。

广义指令即系统调用命令,它必然是工作在核心态,要注意区分“调用”和“执行”广义指令的调用可能发生在用户态,调用广义指令不一定不一定是特权指令,但是广义指令存在于核心态,所以执行一定在核心态。

trap指令、跳转指令和压栈指令均可以在用户态执行,其中 trap指令负责由用户态转换为内核态。关中断指令为特权指令,必须在核心态才能执行。注意,在操作系统中,关中断指令是权限非常大的指令,因为中断是现代操作系统正常运行的核心保障之一,能把它关掉,说明执行这条指令的一定是权限非常大的机构(管态)。

执行系统调用的过程如下:正在运行的进程先传递系统调用参数,然后由陷入(trap)指令负责将用户态转换为内核态,并将返回地址压入堆栈以备后用,接下来CPU执行相应的内核态服务程序,最后返回用户态。

发生系统调用时,CPU执行陷入(Trap)指令,检测到“内中断”后,由CPU负责保存断点(PC)和程序状态字,并将CPU模式改为内核态,然后执行操作系统内核的系统调用入口程序,该内核程序负责保存通用寄存器的内容,再调用某个特定的系统调用服务例程。

内核切换较慢是微内核的特点进程

(线程)之间的通信功能是微内核最频繁使用的功能,因此几乎所有微内核OS都将其放入微内核。低级I/O和硬件紧密相关,因此应放入微内核。低级进程管理和调度属于调度功能的机制部分,应将它放入微内核。微内核OS 将与硬件紧密相关的一小部分放入微内核处理,此时微内核的主要功能是捕获所发生的中断和陷入事件,并进行中断响应处理,识别中断或陷入的事件后,再发送给相关的服务器处理,故中断和陷入处理也应放入微内核。而文件系统服务是放在微内核外的文件服务器中实现的,故仅v不宜放在微内核中。

Windows是宏内核操作系统,在微内核构架中,客户和服务器之间、服务器和服务器之间的通信采用消息传递机制,这就使得微内核系统能很好地支持分布式系统。添加系统服务时不必修改内核,这就使得微内核构架的可扩展性和灵活性更强;微内核构架的主要问题是性能问题。

操作系统的引导程序位于磁盘活动分区的引导扇区中。引导程序分为两种:一种是位于ROM中的自举程序(BIOS的组成部分),用于启动具体的设备:另一种是位于装有操作系统硬盘的活动分区的引导扇区中的引导程序(称为启动管理器),用于引导操作系统。

第二章

进程同步机制
进程同步机制是指在多个进程并发执行时,为了保证它们之间的协调和合作,需要采用的一些手段和方法,以保证它们之间的数据访问、共享资源的使用和进程间通信的正确性和可靠性。

常见的进程同步机制包括:

  1. 互斥锁:只允许一个进程访问共享资源,其他进程需要等待。
  2. 读写锁:允许多个进程同时读共享资源,但只允许一个进程写共享资源。
  3. 信号量:提供了一种计数器,可以用来实现进程间的同步和互斥。
  4. 条件变量:用于在进程之间传递信息,可以用来实现进程的等待和唤醒。
  5. 屏障:可以用来保证一组进程在某个时刻同时到达某个点。
  6. 事件计数器:用于记录发生了多少个事件,可以用于进程间的同步和通信。
    这些机制可以根据具体的场景选择合适的方式进行使用,以保证进程之间的协调和合作。
    基于数据结构的共享和技术存储区的共享
    基于数据结构的共享是指共享一些数据结构,例如树、图等,这些数据结构可以被多个进程或线程共享和访问,不同的进程或线程可以对它进行读、写操作,因为这些数据结构的访问是基于锁机制进行同步的。在多线程编程中,常常会使用锁来同步多个线程对共享数据结构的并发访问。
    技术存储区的共享是指多个进程或线程可以在同一个内存区域中访问和操作数据。这种方式是基于进程间通信(IPC)技术来实现的。进程可以通过共享内存来传递数据,实现进程之间的通信和共享。多个进程或线程可以同时访问共享内存中的数据,不需要使用复制或传递数据的方式。
    数据结构的共享和技术存储区的共享是两种不同的共享方式。在实际应用中,需要根据具体的需求选择合适的共享方式。例如,在单机环境下可以使用基于数据结构的共享方式,而在分布式环境下则需要使用技术存储区的共享方式。

每个进程包含独立的地址空间,进程各自的地址空间是私有的,只能执行自己地址空间中的程序,且只能访问自己地址空间中的数据,相互访问会导致指针的越界错误。因此,进程之间不能直接交换数据,但可利用操作系统提供的共享文件、消息传递、共享存储区等进行通信。

在单处理器系统中,有时候可能处于死锁状态,此时没有一个进程处于运行态,但是CPU空闲

引入线程之后,进程依然是资源分配的单位,内核级线程是处理机调度和分派的单位,,线程本身不具有资源,它可以共享所属进程的全部资源,

一个进程是程序在 一个数据集上的运行过程,运行不同的数据集,将会形成不同的进程。

进程实体主要是代码、数据和 PCB。因此,要清楚了解 PCB内所含的数据结构内容,主要有四大类:进程标志信息、进程控制信息、进程资源信息、CPU现场信息。而全局变量与PCB 无关,它只与用户代码有关。

对进程的管理和控制功能是通过执行各种原语来实现的。

进程之间的通信方式
进程之间的通信方式有以下几种:

  1. 管道:一种半双工的通信方式,数据只能单向流动,并且只能在具有亲缘关系的进程之间使用。
  2. 有名管道:一种特殊的文件,可以在不具有亲缘关系的进程之间使用,提供半双工的通信功能。
  3. 信号:一种异步的通信方式,用于通知接收进程发生了某个事件。
  4. 消息队列:一种消息的链表,允许一个或多个进程向另一个进程发送消息。
  5. 共享内存:多个进程共享一块内存区域,进程可以直接读写该内存区域,是一种高效的进程通信方式。
  6. 套接字:一种通用的、面向网络的进程通信方式,可用于不同计算机之间进程之间的通信。

在引入线程后,进程依然是资源分配的基本单位,线程是调度的基本单位,同一进程中的各个线程共享进程的地址空间。在用户级线程中,有关线程管理的所有工作都由应用程序完成,无须内核的干预,内核意识不到线程的存在。

应用程序没有进行内核级线程管理的代码,只有一个到内核级线程的编程接口,内核为进程及其内部的每个线程维护上下文信息,调度也是在内核中由操作系统完成的,在多线程模型中,用户级线程和内核级线程的连接方式分为多对一、一对一、多对多,“操作系统为每个用户线程建立一个线程控制块”属于一对一模型。用户级线程的切换可以在用户空间完成,内核级线程的切换需要操作系统帮助进行调度,因此用户级线程的切换效率更高。用户级线程的管理工作可以只在用户空间中进行,因此可以在不支持内核级线程的操作系统上实现。

时间片轮转增加了系统开销,所以不会使得系统高效运转,吞吐量和周转时间均不如批处理,

CPU繁忙性指的是该类作业需要占用很长的CPU时间,而很少请求IO操作,因此CPU繁忙型作业类似于长作业,I/O繁忙型作业是指作业执行时需频繁请求IO操作,即可能频繁放弃CPU,所以占用CPU的时间不会太长,一旦放弃CPU,则必须重新排队等待调度,故采用SJF比较适合。时间片轮转法对于短作业和长作业的时间片都一样,所以地位也几乎一样。优先级调度有利于优先级高的进程,而优先级和作业时间长度是没有必然联系的。

进程(线程)调度的时机包括:运行的进程(线程)运行完毕、运行的进程(线程)自我阻塞、运行的进程(线程)的时间片用完、运行的进程(线程)所需的资源没有准备好、运行的进程(线程)出现错误。以上时机都在CPU方式为不可抢占方式时引起进程(线程)调度。在 CPU方式是可抢占方式时,就绪对列中的某个进程(线程)的优先级高于当前运行进程(线程)的优先级时,也会发生进程(线程)调度

信号量是一个特殊的整型变量,只有初始化和PV操作才能改变其值。通常,信号量分为互斥量和资源量,互斥量的初值一般为1,表示临界区只允许一个进程进入,从而实现互斥。当互斥量等于0时,表示临界区已有一个进程进入,临界区外尚无进程等待;当互斥量小于0时,表示临界区中有一个进程,互斥量的绝对值表示在临界区外等待进入的进程数。同理,资源信号量的初值可以是任意整数,表示可用的资源数,当资源量小于0时,表示所有资源已全部用完,而且还有进程正在等待使用该资源,等待的进程数就是资源量的绝对值。

如何判断一个资源是否是互斥资源:看一个东西能否同时给几个用户便可,若是不能给几个同时使用就是互斥资源,

磁盘存储介质和磁盘存储器是不同的概念。

磁盘存储介质是指用于存储数据的具有磁性的介质,例如硬盘、软盘、磁带等。它们是将信息通过在磁性表面上的磁性位改变来存储。

而磁盘存储器(也称为磁盘驱动器或硬盘)是指计算机系统中的一种存储设备,用于读取和写入磁盘存储介质上的数据。它是一个独立的硬件设备,通常包含一个或多个磁盘(盘片),读写头、驱动电机等组件。可以说,磁盘存储介质是磁盘存储器的一部分,磁盘存储器包含磁盘存储介质和相关的读写设备。

若代码可被多个进程在任意时刻共享,则要求任意一个进程在调用此段代码时都以同样的方式运行;而且进程在运行过程中被中断后再继续执行,其执行结果不受影响。这必然要求代码不能被任何进程修改,否则无法满足共享的要求。这样的代码就是可重入代码,也称纯代码,即允许多个进程同时访问的代码。

管程的signal操作与信号量机制中的V操作不同,信号量机制中的V操作一定会改变信号量的值S=S+1。而管程中的signal操作是针对某个条件变量的,若不存在因该条件而阻塞的进程,则signal不会产生任何影响。

①S.value >0,表示某类可用资源的数量。每次Р操作,意味着请求分配一个单位的资源。②S.value≤0,表示某类资源已经没有,或者说还有因请求该资源而被阻塞的进程,S.value的绝对值表示等待进程数目。
题目中注意是执行P操作前还是执行P操作后

所谓互斥使用某临界资源,是指在同一时间段只允许一个进程使用此资源,所以互斥信号量的初值都为1。

未遵循让权等待就会造成饥饿,

“条件变量”是管程内部说明和使用的一种特殊变量,其作用类似于信号量机制中的“信号量”,都用于实现进程同步。需要注意的是,在同一时刻,管程中只能有一个进程在执行。若进程A执行了x.wait()操作,则该进程会阻塞,并挂到条件变量x对应的阻塞队列上。这样,管程的使用权被释放,就可以有另一个进程进入管程。若进程B执行了x.signal()操作,则会唤醒x对应的阻塞队列的队首进程。在 Pascal 语言的管程中,规定只有一个进程要离开管程时才能调用signal()操作

避免死锁是指在资源动态分配过程中使用某些算法加以限制,防止系统进入不安全状态而避免死锁的发生,预防死锁是破坏死锁产生 四个必要条件,

做这种个资源分配题目的时候,最好还是用资源最大需求减去已分配资源,算出还需要多少资源,

死锁预防限制了申请资源的顺序,死锁避免没有限制申请资源的顺序

第三章

采用连续分配方式时,会使相当一部分内存空间都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费,也无法从逻辑上扩大内存容量,因此虚拟内存的实现只能建立在离散分配的内存管理的基础上。有以下三种实现方式:请求分页;请求分段;请求段页式。虚存的实际容量受外存和内存容量之和限制,虚存的最大容量是由计算机的地址位数决定的。

导致LRU算法实现起来耗费高的原因是需要对所有的页进行排序,所以需要硬件的特殊支持

缺页之后进行缺页中断,再查的时候,也是先查快表,再查慢表。

第四章

打开文件操作是将该文件的 FCB存入内存的活跃文件目录表,而不是将文件内容复制到主存,找到指定文件目录是打开文件之前的操作。
任何一个用户在进入系统时都必须进行注册,这一级安全管理时系统级,

文件是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的FCB或者索引节点,所以目的就是FCB或者索引结点,若是能找到FCB或者索引结点也就不需要文件路径。

链接分配显示链接中文件分配表是一个磁盘有一个,在系统启动时就被调入内存,而索引表是一个文件对应的一个,打开文件表仅仅存放已打开信息的表,将指名文件的属性从外存复制到内存,再使用该文件时直接返回索引,,位表和空闲块链表时磁盘管理方法,索引文件的时候索引表记录一个文件中各个记录之间的存放方式的,索引分配同样也是一个索引表,FCB中记录的是索引块,通过索引块找索引表,接下来就可以找到这个文件各个逻辑块所对应的物理块号了,访问控制表:每一个文件对应一个访问控制表,用于记录各个用户或各组用户对文件的访问权限,

当所读文件的数据不在内存时,产生中断(缺页中断),原进程进入阻塞态,直到所需数据从外存调入内存后,才将该进程唤醒。read系统调用通过陷入将CPU从用户态切换到核心态,从而获取操作系统提供的服务,要读一个文件,首先要用open系统调用打开该文件。open 中的参数包含文件的路径名与文件名,而read只需使用 open返回的文件描述符,并不使用文件名作为参数。read 要求用户提供三个输入参数:①文件描述符fd;②buf缓冲区首址:③传送的字节数n。read的功能是试图从fa所指示的文件中读入n个字节的数据,并将它们送至由指针buf所指示的缓冲区中。
一个文件被用户进程首次打开即被执行了open操作,会把文件的FCB调入内存,而不会把文件内容读到内存中,只有进程希望获取文件内容时才会读入文件内容;

从系统角度看,文件系统负责对文件的存储空间进行组织、分配,负责文件的存储并对存入文件进行保护、检索。从用户角度看,文件系统根据一定的格式将用户的文件存放到文件存储器中适当的地方,当用户需要使用文件时,系统根据用户所给的文件名能够从文件存储器中找到所需要的文件。

根目录存放的位置是固定不变的,开机的时候自动的将根目录的数据存放于内存够中。

确立了这个分区的文件系统是什么,那就是确定了这个磁盘分区中的物理结构是什么,同时也确定了这个分区的根目录的信息,
索引结点中有一个索引表,索引表中就会记录第一块在哪,第二块在哪,第三块在哪,文件目录有两种实现方式,第一种就是每一个目录项就是一个完整的FCB,第二种方式就是每一个文件名只包含文件名和文件的索引结点编号(也就是给目录项瘦身),索引结点号指向了某一个索引结点,文件的完整信息就保存在文件的索引结点中,在磁盘中用一片连续的地址空间存储这些索引结点,也就是某几个块来存放索引结点,当要访问一个文件的时候,要找到这个文件的目录项,这个目录项包含文件名和文件的索引编号,通过这个编号是不是就能算出某一个索引结点在磁盘的什么位置,若是采用inode这种目录实现方式的话,任何一个文件都会对应一个索引结点,这个文件的第一块第二块,第三块分别在什么位置,是存放于混合索引中的,

假设文件B有三个块,这个文件系统采用的是混合索引,文件B的每一块存放于什么位置需要索引表来表示,而这个索引表就被包含在文件B的inode中,

共享设备必须是可寻址的和可随机访问的设备。这意味着每个设备必须具有唯一的地址,以便其他设备可以识别和访问它。此外,共享设备必须允许随机访问,这意味着其他设备可以在任何时候访问设备的任何部分,而不必按照规定的顺序进行。这是共享设备的基本要求之一,因为共享设备需要能够同时支持多个用户或进程的访问。

DMA 是一种不经过CPU 而直接从主存存取数据的数据交换模式,它在I/0设备和主存之间建立了一条直接数据通路,如磁盘。当然,这条数据通路只是逻辑上的,实际并未直接建立一条物理线路,而通常是通过总线进行的。

通道是一种特殊的处理器,所以属于硬件技术。SPOOLing、缓冲池、内存覆盖都是在内存的基础上通过软件实现的

CPU 启动通道时不管启动成功与否,通道都要回答 CPU,通道在执行通道程序(用来传送数据)的过程中,CPU 与通道并行,通道完成通道程序的执行时,便发 I/O 中断向 CPU 报告

通道方式中的中断
在计算机中,通道是一种专门的I/O数据传输方式,通道控制器与主CPU之间进行通信传输数据,可以提高计算机的工作效率。通道方式中,中断会发生在以下情况下:

  1. I/O操作完成后:当通道控制器完成I/O操作时,它会发送一个中断信号给主CPU,表示数据已经传输完毕,主CPU可以开始处理这些数据了。
  2. 通道出现错误:在通道传输数据的过程中,如果发生任何错误,例如传输数据出错,设备故障等,通道控制器会向主CPU发送中断信号,以便主CPU能够及时处理这些错误。
  3. 通道控制器请求服务:如果通道控制器需要主CPU的服务,例如请求缓冲区,请求数据传输等操作,它也会发送一个中断信号给主CPU,以便主CPU能够及时响应这些请求。
    总之,在通道方式中,中断是一种非常重要的机制,它可以使主CPU和通道控制器之间进行有效的通信和协调,从而提高计算机系统的效率和可靠性。

系统调用是操作系统提供给用户程序的通用接口,属于设备无关软件的功能,不会因为具体设备的不同而改变。而设备驱动程序负责执行操作系统发出的 I/O 命令,它因设备不同而不同。

键盘是典型的通过中断 I/O 方式工作的外设,当用户输入信息时,计算机响应中断并通过中断处理程序获得输入信息,所以首先获得键盘输入信息的程序时中断处理程序。

在鼠标移动时,若有高优先级的操作产生,为了记录鼠标活动的情况,必须使用缓冲技术I。由于磁盘驱动器和目标或源 IO 设备间的吞吐量不同,必须采用缓冲技术。为了能使数据从用户作业空间传送到磁盘或从磁盘传送到用户作业空间,必须采用缓冲技术,为了便于多幅图形的存取及提高性能,缓冲技术是可以采用的,特别是在显示当前一幅图形又要得到下一幅图形时,应采用双缓冲技术。

SPOOLing 技术需要使用磁盘空间(输入井和输出井)和内存空间(输入/输出缓冲区),不需要外围计算机的支持。

SPOOLing 系统主要包含三部分,即输入井和输出井、输入缓冲区和输出缓冲区以及输入进程和输出进程。这三部分由预输入程序、并管理程序和缓输出程序管理,以保证系统正常运行。

打印机是独享设备,利用 SPOOLing 技术可将打印机改造为可供多个用户共享的虚拟设备,采用假脱机技术,将磁盘的一部分作为公共缓冲区以代替打印机,用户对打印机的操作实际上是对磁盘的存储操作,用以代替打印机的部分由虚拟设备完成。

磁盘是可共享设备(分时共享),是指某段时间内可以有多个用户进行访问。但某一时能有一个作业可以访问。

SSD 的写速度慢于读速度,但不至于比常规机械硬盘差。SSD 基于闪存技术没有机械部件,随机存取速度很快,传统机械硬盘因为需要寻道和找扇区的时间,所以随机存取速度慢:传统机械硬盘转速很快,连续存取比随机存取快得多,因此SSD 的优势主要体现在随机存取的速度上静态磨损算法在没有写入数据时,SSD 监测并自动进行数据分配,因此表现更为优秀。因为闪存的擦除速度较慢,若每次都选择写入存放有数据的块会极大地降低写入速度,静态磨损均衡是指在没有写入数据时,SSD监测并自动进行数据分配,从而使得各块的擦写更加均衡,

绝大多数操作系统为改善磁盘访问时间,以簇为单位进行空间分配

当系统总是持续出现某个磁道的访问请求时,均持续满足最短寻道时间优先、扫描算法和循环扫描算法的访问条件,会一直服务该访问请求。而先来先服务按照请求次序进行调度,比较公平。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值