文章目录
- 一. 单选
- 1.若一个用户进程通过read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()。
- 2.下列关于虚拟存储的叙述中,正确的是()。
- 3.下列选项中,不可能在用户态发生的事件是()。
- 4. 同一进程下的线程可以共享()
- 5.在缺页处理过程中,操作系统执行的操作可能是()
- 6.下面选项中,满足短任务优先且不会发生饥饿现象的调度算法是()
- 7.下列选项中,降低进程优先级的合理时机是()
- 8. 在使用锁保证线程安全时,可能会出现活跃度失败的情况,活跃度失败主要包括()
- 9.下列选项中,导致 创建 新进程的操作是()
- 10. 对进程和线程的描述,以下正确的是()
- 二. 编程
- 1. 不用加减乘除做加法
- 2. 三角形
一. 单选
1.若一个用户进程通过read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()。
Ⅰ. 若该文件的数据不在内存中,则该进程进入睡眠等待状态
Ⅱ. 请求 read 系统调用会导致 CPU 从用户态切换到核心态
Ⅲ. read 系统调用的参数应包含文件的名称
A 仅Ⅰ、 Ⅱ
B 仅Ⅰ、 Ⅲ
C 仅Ⅱ、 Ⅲ
D Ⅰ、 Ⅱ和Ⅲ
正确答案:A
应包含的是文件描述符
2.下列关于虚拟存储的叙述中,正确的是()。
A 虚拟存储只能基于连续分配技术
B 虚拟存储只能基于非连续分配技术
C 虚拟存储容量只受外存容量的限制
D 虚拟存储容量只受内存容量的限制
正确答案:B
1.虚拟存储本质上是进程的虚拟地址空间。装入程序是,值将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。
2.采用连续分配方式,会使一部分内存空间处于暂时会永久的空闲状态,从而造成内存资源的浪费,并且无法从逻辑上扩大内存容量
,因此虚拟内存的实现只能建立在离散分配的内存管理基础上。
3.虚拟存储器容量不受内外存容量限制,是由CPU的寻址范围决定
的。
3.下列选项中,不可能在用户态发生的事件是()。
A 系统调用
B 外部中断
C 进程切换
D 缺页
正确答案:C
A 系统调用——调用匹配系统调用函数
B 外部中断——ctrl+c,中断程序
C 进程切换——由操作系统内核来调度产生的
D 缺页——访问某一块内存的时候,优肯导致缺页现象
4. 同一进程下的线程可以共享()
A stack
B data section——代码段
C register set
D thread ID
正确答案:B
线程共享:
进程代码段
进程的公有数据(利用这些共享数据,线程很容易实现相互之间的通讯)
进程打开的文件描述符
信号的处理器
进程的当前目录和进程用户ID与进程组ID
线程独有:
线程ID
栈
错误返回码
线程优先级
errno
5.在缺页处理过程中,操作系统执行的操作可能是()
Ⅰ.修改页表 Ⅱ.磁盘 I/O Ⅲ.分配页框
A 仅Ⅰ、 Ⅱ
B 仅Ⅱ
C 仅Ⅲ
D Ⅰ、 Ⅱ和Ⅲ
正确答案:D
6.下面选项中,满足短任务优先且不会发生饥饿现象的调度算法是()
A 先来先服务——有利于长作业
B 高响应比优先——短进程优先级高
C 时间片轮转——公平算法
D 非抢占式短任务优先——长作业优先级低,在短作业比较多的情况下对长作业不友好
正确答案:B
7.下列选项中,降低进程优先级的合理时机是()
A 进程的时间片用完
B 进程刚完成I/O,进入就绪列队
C 进程持久处于就绪列队
D 进程从就绪状态转为运行态
正确答案:A
8. 在使用锁保证线程安全时,可能会出现活跃度失败的情况,活跃度失败主要包括()
A 死锁
B 饥饿
C 活锁
D 以上全部
正确答案:D
活跃度是指线程或进程长时间得不到CPU占用
9.下列选项中,导致 创建 新进程的操作是()
I用户登陆成功 II设备分配 III启动程序执行
A 仅I和II
B 仅II和III
C 仅I和III
D I、II和III
正确答案:C
10. 对进程和线程的描述,以下正确的是()
A 父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间
B 改变进程里面主线程的状态会影响到其他线程的行为,改变父进程的状态不会影响到其他子进程
C 多线程会引起死锁,而多进程不会
D 以上选项都不正确
正确答案:D
1.子进程有自己独立的虚拟空间地址
2.每个线程都是独立被操作系统调度的,所以有独立的状态信息
3.父进程创建子进程是,子进程会复制父进程的内存(包括锁状态)有可能导致子进程陷入死锁状态
二. 编程
1. 不用加减乘除做加法
链接
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足
进阶:空间复杂度 ,时间复杂度
示例1:
输入
1,2
输出
3
示例2:
输入
0,0
输出
0
正确答案:
class Solution {
public:int Add(int num1, int num2) {while(num2 != 0){int s = num1 ^ num2;int m = (num1 & num2)<<1;num1 = s;num2 = m;
}return num1;}
};
1.不算进位相加的值:与按位异或的值一样(相同为0,不同为1)
2.计算进位的值:与按位与的值,再左移一位一样(按位与:两个全为1就是1,有0就是0)(num1&num2)<<1
3.进位的值不等于0就继续上序两个操作
2. 三角形
链接
给定三条边,请你判断一下能不能组成一个三角形。
输入描述:
输入包含多组数据,每组数据包含三个正整数a、b、c(1≤a, b, c≤10^100)。
输出描述:
对应每一组数据,如果它们能组成一个三角形,则输出“Yes”;否则,输出“No”。
示例1:
输入
1 2 3
2 2 2
输出
No
Yes
正确答案:
#include<iostream>
using namespace std;
#define add(x,y) ((x)+(y))
#define Cmp(x,y) ((x)>(y))int main()
{double a,b,c;while(cin>>a>>b>>c){//a+b > c && a+c > b && b+c >aif(Cmp(add(a,b),c) && Cmp(add(a,c),b) && Cmp(add(b,c),a))cout<<"Yes"<<endl;elsecout<<"No"<<endl;
}return 0;
}
注意:定义的类型不能用int、long,要用double,不然范围不够