目录
基础部分
进阶部分
基础部分
1.进程与线程的区别
- 构成上:进程内部含有线程和和逻辑内存;线程内部含有栈、程序计数器PC(保存下一条指令的地址)
- 功能上:进程是操作系统资源分配的基本单位,同一进程内共享资源;线程是操作系统任务执行的基本单位
- 开销上:每个进程有独立代码和数据空间,切换开销大;每个线程只有运行栈、PC是独立的,切换开销小
2.程序是一组指令的集合,是一个静态实体;
进程则是某个数据集上的程序执行,是一个动态实体;
运行的程序至少会有一个进程
3.操作系统的储存:
- 容量从大到小:硬盘、内存、缓存、寄存器
- 速度从快到慢:寄存器、缓存、内存、硬盘
即容量越小速度越快
4.操作系统的寻址操作
- 首先根据指针访问进程中的逻辑地址(逻辑地址是虚拟的)
- 由逻辑地址解析得到物理内存中的地址(但这个地址也可能是系统虚拟处理的内存,以分页的形式存放在物理内存中)
- 将该地址拿给CPU的寄存器处理
5.进程间的通信方式
- 共享内存:两进程共享一块内存,该内存上数据可以共同修改和读取
- 管道通信:实现进程间通信的一种共享文件,用于连接一个读进程和一个写进程
- 消息队列:是消息的链表,有标识符标记并存在内核中
- 套接字(socket):是网络编程的api,通过它可实现不同机器、不同进程之间的通信
- 信号:操作系统通过信号来通知进程系统中发生某种预先规定好的事件
6.线程同步的方式
- 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才被允许访问公共资源,因为互斥对象只有一个所以保证了同一时间只有一个线程访问
- 信号量:运行同一时刻多个线程访问同一资源,但需要控制允许的最大线程数量
- 事件(信号):通过通知操作的方式来保持多线程同步,还可以方便实现多线程优先级的比较
- 临界区:通过对多线程的串行化来访问公共资源,速度快
7.进程的三种状态
- 运行状态
- 就绪状态(等待被调度使用CPU的运行权)
- 阻塞状态
8.线程的六种状态
- 初始:还没有调用start()方法
- 运行
- 阻塞:线程阻塞于锁
- 等待:等待其他线程做出一些特定动作
- 超时等待:在超过时间后会自动返回
- 终止:表示该线程已执行完毕
9.CPU的调度算法
- 先来先服务:先来的先执行
- 短作业优先:运行完成当前作业会去找最短的作业执行(这个短的由用户定义,实际不一定短)
- 时间片轮转:设定一个时间片大小,把任务分割成n部分,选取等待时间最长的先执行
10.死锁:指两个或两个以上的进程在执行过程中,由于竞争资源或由于彼此通信而造成的阻塞,若无外力作用无法推进下去
产生条件
- 互斥条件:一段时间内某资源只能由一个进程占有
- 请求和保持:进程已经占有至少一个资源,但又对其他进程占有的资源提出要求,此时进程阻塞,但又对已经获得的资源保持不放
- 不可抢占:进程已获得的资源,在它使用完之前不能剥夺
- 环路条件:在一个环形链中,每个进程都在等待一个被占用的资源
死锁处理方法
- 鸵鸟策略(大部分采用):直接忽略死锁
- 预防死锁
- 破坏互斥,让资源静态分配可以共享使用(一般无法破坏)
- 破坏请求与保持,规定所有进程在它们执行之前要请求所有它们需要的资源
- 破坏不可抢占,让高优先级可以剥夺低优先级的资源
- 破坏环路:给资源编号,按顺序申请资源
- 避免死锁:安全序列、银行家算法
- 检测和接触死锁
- 一次消除与不阻塞进程相连的边,最后剩下的就是出现死锁的进程(也叫资源分配图)
- 资源剥夺、终止进程、进程回退
11.什么是内存?
答:内存是一种高速存储设备,仅次于寄存器和缓存。因为CPU处理速度与外存读取程序速度存在差异,所以程序执行前要先放入内存后再被CPU处理,内存用于缓和CPU与外存的速度矛盾,提高CPU利用率
进阶部分
1.操作系统的四个特性
- 并发:同一段时间内多个程序执行(并行指的是同一时刻)
- 共享:系统中资源可以被内存中多个并发执行的进程共同使用
- 虚拟:通过时分复用(分时系统)以及空分复用(虚拟内存)实现把一个物理实体虚拟成多个虚拟实体
- 异步:系统中的进程以走走停停方式执行,且以一种不可预知的速度推进
2.操作系统主要功能
- 处理机管理
- 存储器管理(又叫内存管理)
- 设备管理
- 文件管理
- 提供用户接口
3.采用段页式存储,将进程按逻辑模块分段,再将各段分页,将内存空间分为大小相同的页框,将程序按页装入页框,分页分段都是为虚拟内存服务的。
- 分页:指将内存空间分为一个个大小相等的分区,每个分区叫页框(一般为1kb),将用户进程的地址空间分为与页框相等的一个个称为页的区域。
- 进程的每一个页都要放入一个页框里
- 程序使用的仍是逻辑地址,通过页表地址加页内偏移才能得到物理地址
- 分段:指程序按自身逻辑关系划分为若干段,例如代码段、数据段、堆栈段
- 分页和分段区别
- 分页是系统为利用内存空间,将程序按页装入内存,是系统行为;分段是按程序逻辑意义划分,要用户来划分每个段
- 页的大小是固定的,段的大小则取决于用户编写的程序
- 分页是一维地址空间,分段是二维地址空间(即第0页最后一个地址与第1页第一个地址是连续的,而段号0最后一个地址与段号1第一个地址不是连续的)
- 缺页中断:当前指令想要访问的页面没有调入内存,而发生的中断
4.页面置换算法
- 最佳置换算法(OPT):每次淘汰的页面都是最长时间内不再被访问的页面,保证最低缺页率(但因为一般无法预知页面访问序列,因此无法实现)
- 先进先出算法(FIFO):每次淘汰的页面都是最早进入内存的页面(较简单,性能较差)
- 最近最久未使用置换算法(LRU):每次淘汰的页面都是最近最久未使用的页面
- 数组实现:用一个数组来存数据,每个数据有一个时间戳t,插入时将新数据t设为0,旧数据t加1,访问时将被访问数据t设为0,满内存时删除t最大的数据
- 链表实现:插入时放在首部,访问时放在首部,满内存时删除最末尾的数据
- 时钟置换算法(CLOCK):为每个页面加一个访问位(0为最近未访问,1为最近访问),淘汰时先淘汰访问位为0的,遇到1就把它改为0,下一次循环遍历到再淘汰(淘汰一个页面最多两次扫描)
- 改进型:再多加一个修改位,即每个页面有(访问位,修改位),淘汰顺序(0,0)>(0,1)>(1,0)>(1,1),没有一个(0,0)时才淘汰一个(0,1)以此类推(淘汰一个页面最多四次扫描)
5.磁盘寻址
- 根据“柱面号”移动磁壁,让磁头指向指定柱面
- 激活指定盘面对应的磁头
- 磁盘旋转过程中,指定的扇区会从磁头下面划过,完成对其的读写
磁盘调度算法
- 先来先服务:按磁盘请求顺序进行调度
- 最短寻找时间优先:优先处理与当前磁头最近的磁道,易出现饥饿现象(最后两个磁道相距极远)
- 电梯算法:优先处理与当前磁头最近的磁道,但磁头移动方向固定,只能一直往外侧磁道移,移到最外后只能一直往内侧磁道移,降低饥饿现象