【笔记】操作系统笔记

目录

基础部分

进阶部分

基础部分

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.磁盘寻址

  • 根据“柱面号”移动磁壁,让磁头指向指定柱面
  • 激活指定盘面对应的磁头
  • 磁盘旋转过程中,指定的扇区会从磁头下面划过,完成对其的读写

磁盘调度算法

  • 先来先服务:按磁盘请求顺序进行调度
  • 最短寻找时间优先:优先处理与当前磁头最近的磁道,易出现饥饿现象(最后两个磁道相距极远)
  • 电梯算法:优先处理与当前磁头最近的磁道,但磁头移动方向固定,只能一直往外侧磁道移,移到最外后只能一直往内侧磁道移,降低饥饿现象