操作系统刷题笔记(选择题与基础概念)
Posted -YIN
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统刷题笔记(选择题与基础概念)相关的知识,希望对你有一定的参考价值。
选择题
存储
存储器读取时间
对于普通的计算机,对以下事件的平均耗时从小到大排序为____:
A.读取1KB内存数据 B.从硬盘连续读取1KB数据 C.读取一次L2缓存 D.一次磁盘寻道
A C,A,D,B
B C,D,A,B
C D,C,A,B
D D,A,C,B
机械硬盘相关知识:
磁道
以盘片中心为圆心,用不同的半径,划分出不同的很窄的圆环形区域,称为磁道
扇区
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区扇区是磁盘最小的物理存储单元
柱面
上下一串盘片中,相同半径的磁道所组成的一个圆柱型的环壁,就称为柱面
LRU
一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1321215123},采用LRU算法时,缺页数是______次。
A 3
B 4
C 5
D 6
- 缺页中断:要访问的也不存在主存中, 需要系统将其调入主存在进行访问。
- LRU(最近最久未使用和最少使用):当要调入一页而必须淘汰旧页时,按LRU算法置换
- 缺页数:即缺页中断次数,等于 进程的物理块数 + 页面置换数
文件
软硬链接
Linux中包括两种链接:硬链接(Hard Link)和软连接(Soft Link),下列说法正确的是()
A 软连接可以跨文件系统进行连接,硬链接不可以
B 当删除原文件的时候软连接文件仍然存在,且指向的内容不变
C 硬链接被删除,磁盘上的数据文件会同时被删除
D 硬链接会重新建立一个inode,软链接不会
B: 前半句对,指向的内容会改变
硬连接不管有多少个,都指向的是同一个inode节点,会把结点连接数增加,只要结点的连接数不是 0 ,文件就一直存在不管你删除的是源文件还是连接的文件。只要有一个存在文件就存在。 当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改。软链接不直接使用 i 节点号作为文件指针 , 而是使用文件路径名作为指针。所以删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件。软链接有自己的 i 节点 , 并在磁盘上有一小片空间存放路径名。
硬链接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候: 1. 在目录中将其删除 2. inode link count - 1,系统调用会检查inode link count的数值,如果他>=1,那么inode不会被回收。因此文件的内容不会被删除。
硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。
链接https://www.nowcoder.com/questionTerminal/1b695f9055ed4017a9fe578ef8b02c34 来源牛客网
说说软硬链接的区别
- 定义不同
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
硬链接就是一个文件的一个或多个文件名。把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。- 限制不同
硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建;
软链接可对不存在的文件或目录创建软链接;可交叉文件系统;- 创建方式不同
硬链接不能对目录进行创建,只可对文件创建;
软链接可对文件或目录创建;- 影响不同
删除一个硬链接文件并不影响其他有相同 inode 号的文件。
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
设备
估算cpu时间
使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的CPU时间的数量级最接近()
A 0.001秒
B 1秒
C 100秒
D 2小时
1G = 1024M = 10241024K = 102410241024Byte
每次赋值1Byte都要执行一条指令(10-9s)所以时间:10241024102410-9s = 1.073741824 s
设系统缓冲区和用户工作区均采用单缓冲,从外设读入1 个数据块到系统缓冲区的时间为100,从系统缓冲区读入 1 个数据块到用户工作区的时间为 5, 对用户工作区中的 1 个数据块进行分析的时间为 90(如下图所示)。进程从外设读入并分析 2 个数据块的最短时间是()。
A 200
B 295
C 300
D 390
数据总线
现代计算机普遍采用总线结构,包括数据总线、地址总线、控制总线,通常与数据总线位数对应相同的部件是( )
A CPU
B 存储器
C 地址总线
D 控制总线
基础概念
地址总线:目决定内存数据操作的地址
1.、CPU是通过地址总线来指定存储单元的。
2.、地址总线决定了CPU能访问的最大内存空间的大小。
3、地址总线是地址线数量之和。
数据总线:决定传输的数据值。(字长大小)
1、决定一次数据传输可决定的数据大小。
2、数据总线的宽度决定了CPU和外界的数据传送速度。
3、每条传输线只能传递1位二进制数据。
4、数据总线是数据线条数之和。
控制总线:反映了数据的状态和传输方式。
1、CPU通过控制总线对外部器件进行控制。
2、控制总线的宽度决定了CPU对外器件的控制能力。
3、控制总线控制线数量之和。
参考答案:
数据总线用于传送数据信息。数据总线是双向三态形式的总线,即它既可以把 CPU 的数据传送到存储器或输入输出接口等其他部件,也可以将其他部件的数据传送到 CPU 。数据总线的位数是微型计算机的一个重要指标,通常与微处理的字长相一致。例如,Intel 8086 微处理器字长 16 位,其数据总线宽度也是 16 位。
故正确答案为 A 选项。
进程
父子进程
关于子进程和父进程的说法,下面哪一个是正确的?()
A 一个父进程可以创建若干个子进程,一个子进程可以从属于若干个父进程
B 父进程被撤销时,其所有子进程也被相应撤消
C 子进程被撤销时,其从属的父进程也被撤销
D 一个进程可以没有父进程或子进程
0号进程没有父进程
除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程
进程间通信
基本概念:
管道:
管道中还有命名管道和非命名(匿名管道)管道之分,非命名管道只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式。FIFO是一种先进先出的队列。 它类似于一个管道,只允许数据的单向流动。每个FIFO都有一个名字,允许不相关的进程访问同一个FIFO, 因此也成为命名管。
消息队列:
是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据。需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据的时候,就是上次的数据!
共享内存:
只要首先创建一个共享内存区,其它进程按照附加到共享区的内存当中,就能访问到这个共享内存区中的数据,当然可读可写;
套接字:
套接字是当今使用最频繁的进程间通信方式,就是网络通信。
进程间通讯的方式中哪种的访问速度最快?
A 管道
B 消息队列
C 共享内存
D 套接字
管道:速度慢,容量有限
消息队列:容量受到系统限制,且要注意第一次读的时候, 要考虑上一次没有读完数据的问题。
共享内存:能够很容易控制容量,速度快
套接字:需要跨网络,虽然可以持续的传递, 但是在速度上还是没有共享内存快捷
管道
下列关于管道(Pipe)通信的叙述中,正确的是 ()
A 一个管道可实现双向数据传输
B 管道的容量仅受磁盘容量大小限制
C 进程对管道进行读操作和写操作都可以被阻塞
D 一个管道只能有一个读写进程或一个写进程对其操作
进程调度状态
进程调度时,下列进程状态的变化过程哪一项是不可能发生的?()
A 阻塞挂起->阻塞
B 就绪挂起->就绪
C 就绪挂起->阻塞挂起
D 阻塞挂起->就绪挂起
下列选项中,会导致进程从执行态变为就绪态的事件是()。
A 执行 P(wait)操作
B 申请内存失败
C 启动 I/O 设备
D 被高优先级进程抢占
一个进程的读磁区操作完成后,操作系统针对该进程必做的是 ()
A 修改进程状态为就绪态
B 降低进程优先级
C .进程分配用户内存空间
D 增加进程的时间片大小
多线程(概念)
以下关于多线程的叙述错误的是:
A 线程同步的方法包括使用临界区,互斥量,信号量等
B 两个线程同时对简单类型全局变量进行写操作也需要互斥
C 实现可重入函数时,对自动变量也要用互斥量加以保护
D 可重入函数不可以调用不可重入函数
临界区:
指的是一个访问共用资源(同一个全局变量,同一个类对象等等)的程序片段
互斥量:
互斥锁的底层就是互斥量,使用互斥锁可以限制多个执行流对临界资源的访问时,只有一个执行流可以访问资源,其他执行流需要等待。从而保证了程序结果没有二义性
信号量:
信号量可以描述并且管理一个资源的数量, 提供wait/post
的接口来保证程序不会产生二义性结果, 同时信号量也可以保证线程同步,信号量的底层有一个资源计数器+PCB等待队列
可重入函数&不可重入函数
可重入函数:在多线程的程序当中,如果一个函数可能同一时刻被多个线程访问,没有导致程序的结果产生二义性,则该函数被称之为可重入函数
不可重入函数:在多线程的程序当中,如果一个函数可能同一时刻被多个线程访问,从而导致程序的结果产生二义性,则该函数被称之为不可重入函数
下面有关内核线程和用户线程说法错误的是?
A 用户线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会
B 内核线程只运行在内核态,不受用户态上下文的影响。
C 用户线程和内核线程的调度都需要经过内核态。
D 内核线程有利于发挥多处理器的并发优势,但却占用了更多的系统开支。
C: 用户线程调度不是都需要经过内核态
协程
协程:协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。
简单来说可以认为协程是线程里不同的函数,这些函数之间可以相互快速切换
协程和用户态线程非常接近,用户态线程之间的切换不需要陷入内核,但部分操作系统中用户态线程的切换需要内核态线程的辅助
协程是编程语言(或者 lib)提供的特性(协程之间的切换方式与过程可以由编程人员确定),是用户态操作。协程适用于 IO 密集型的任务。常见提供原生协程支持的语言有:c++20、golang、python 等,其他语言以库的形式提供协程功能,比如 C++20 之前腾讯的 fiber 和 libco 等等
协程的切换和线程进程的切换机制是相似的(CPU 上下文与栈信息的保存与恢复),协程在切换出去的时候需要保存当前的运行状态,比如 CPU 寄存器、栈信息等等
线程与协程的区别:
(1)协程执行效率极高。协程直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小。
(2)协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高。
(3)一个线程可以有多个协程。
以上是关于操作系统刷题笔记(选择题与基础概念)的主要内容,如果未能解决你的问题,请参考以下文章