文章目录
C/C++笔试练习
选择部分
(1)read函数
若一个用户进程通过read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是( )。
Ⅰ. 若该文件的数据不在内存中,则该进程进入睡眠等待状态
Ⅱ. 请求 read 系统调用会导致 CPU 从用户态切换到核心态
Ⅲ. read 系统调用的参数应包含文件的名称
A.仅Ⅰ、 Ⅱ
B.仅Ⅰ、 Ⅲ
C.仅Ⅱ、 Ⅲ
D.Ⅰ、 Ⅱ和Ⅲ
答案:A
(1)从上图可以看出来,当我们调用“read”系统调用之后, 我们的进程本质上是需要从磁盘请求数据的,此时进程会进入到阻塞状态,由于并不需要CPU的参与,需要磁盘10的操作,所以,该进程就会进入可中断睡眠状态,等待磁盘I0的完毕。
(2)rend是系统调用,会执行内核的代码,所以,程序会从用户态切换到内核态
read函数模型:
ssize t read(int fd, void *buf, size t count);
通过函数的模型, 我们发现并不需要包含文件的名称,而是需要文件描述符。
(2)虚拟存储
下列关于虚拟存储的叙述中,正确的是()。
A.虚拟存储只能基于连续分配技术
B.虚拟存储只能基于非连续分配技术
C.虚拟存储容量只受外存容量的限制
D.虚拟存储容量只受内存容量的限制
答案:B
虚拟存储本质上就是进程的虚拟地址空间。
装入程序时,只将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。
采用连续分配方录,会使相当一部分内存空间都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费,也无法从逻辑上扩大内存容量,因此虚拟内容的实现只能建立在离散分配的内存管理的基础上。
虚拟存储器容量既不受外存容量限制,又不受内存容量限制,而是由CPU的寻址范围决定的。
(3)用户态
下列选项中,不可能在用户态发生的事件是()。
A.系统调用
B.外部中断
C.进程切换
D.缺页
答案:C
A 系统调用:例如调用pipe系统调用函数。
B 外部中断:例如程序在运行的时候,ctrl+c,中断程序。
C 进程切换:进程的切换是由操作系统内核来调度产生的,所以在用户态是不会发生的。
D 缺页: 访问某一块内存的时候,有可能导致缺页现象。
(4)线程特点
同一进程下的线程可以共享()
A.stack
B.data section
C.register set
D.thread ID
答案:B
线程共享:
(1)进程代码段、
(2)进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、
(3)进程打开的文件描述符、
(4)信号的处理器、
(5)进程的当前目录和进程用户ID与进程组ID
线程独有:
(1)线程ID
(2)栈
(3)错误返回码
(4)线程优先级
(5)errno
(5)缺页处理
在缺页处理过程中,操作系统执行的操作可能是()
Ⅰ.修改页表 Ⅱ.磁盘 I/O Ⅲ.分配页框
A.仅Ⅰ、 Ⅱ
B.仅Ⅱ
C.仅Ⅲ
D.Ⅰ、 Ⅱ和Ⅲ