计算操作系统
一 操作系统基础
1.1 什么是操作系统?
- 操作系统(Operating System OS)用来管理计算机硬件与软件资源的程序。
- 本质上操作系统是一个软件程序。
- 操作系统为用户提供一个可视化与系统交互的界面,如windows,linux。
- 操作系统分为内核与外壳(外壳,就是来控制内核的程序;内核,就是能直接操作硬件的程序)。
1.2 系统调用
进程在系统上运行的两个级别:
- 用户态:可直接读取用户程序的数据。
- 系统态:几乎可以访问任何计算机资源,不受限制。
普通的程序基本是用户态,如果涉及到 文件管理 等系统级别的操作就需要系统调用的的方式给系统发请求,具体操作由操作系统完成。
二 进程和线程
2.1 进程和线程的区别?
进程是操作系统资源分配的基本单位,而线程是CPU任务调度和执行的基本单位。他们是包含关系,进程包含线程。
2.2 进程的状态
- 创建态:刚刚创建,未达到就绪态。
- 就绪态:进程具备运行条件,只要处理器调用就可以运行。
- 运行态:进程在处理器上运行,单核处理器(一个CPU)一次只能运行一个进程。
- 阻塞态:等待某一事件而暂停,即使处理器空闲也不能运行。
- 结束态:进程正在消失,可能是正常退出,也可能是其他原因中断退出。
2.3 进程间的通信
- 管道/匿名管道:主要用于父子或兄弟等具有亲缘关系的进程。
- 有名管道:可以用于无亲缘关系的进程。
- 信号:通知进程某个事件已经发生。
- 消息队列:先进先出,的消息链表。 它克服了,管道只能承载字节流,和信号承载信息少的缺点。
- 信号量:他是一个计数器,用于进程间同步。
- 共享内存:多个进程共享的内存。
- 套接字(Sockets):主要用于客户端与服务器间通信,主要使用TCP/IP协议。
2.4 线程间同步方式
- 互斥量:如java的synchronized。
- 信号量:
- 事件:Wait/Notify
2.5 进程调度算法
- 先到先服务调度算法:先进入就绪队列的先分配资源。
- 短作业有限调度算法:在队列中选一个估计耗时最短的。
- 时间片轮转调度算法:每个进程分配一个时间段。
- 多级反馈队列调度算法:既能时高优先级的得到响应,又能使短作业迅速完成。
- 优先级调度算法:先执行优先级高的。
三 操作系统内存管理
3.1 内存管理
内存管理主要负责内存的分配与回收,将逻辑地址转换成物理地址。
3.2 内存管理机制
- 块式管理:内存分成固定大小(块与块大小不一定相等)的块,每块一个进程。块中未利用的空间称之为碎片。
- 页式管理:内存分为固定大小且大小相等的块,将块细分的更小,减少了碎片。 页表对应了逻辑地址与物理地址。
- 段式管理:内存分为一段一段,段比页更小,且段中有逻辑信息如**主程序段 MAIN、子程序段 X、数据段 D 及栈段 S **等, 段表对应了逻辑地址与物理地址。
- 段页式管理:先分成若干段,再分成若干页。
3.3 快表和多级页表
分页管理要点:
1. 虚拟地址到物理地址的转换要快。
2. 虚拟地址空间大,页表也会很大。
- 快表:加快虚拟地址到物理地址的转换,他就相当于缓存,缓存里存的物理地址。与Redis很相似。
- 多级页表:多级页表可以压缩页表占用的内存。
3.4 分页机制和分段机制的共同点和区别?
- 共同点:
- 提高内存利用率,减少碎片。
- 都是离散存储的,但是每个页和段中的内存是连续的。
- 区别:
- 页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序。
- 分页只是为了方便操作系统管理内存,段中还包含逻辑信息更加满足用户需求。
3.5 逻辑(虚拟)地址和物理地址
- 逻辑地址:操作系统决定,如java中的引用。
- 物理地址:寄存器中的真实地址。
3.6 CPU寻址方式?
- 虚拟寻址:CPU的内存管理单元把虚拟地址转换成物理地址,然后才可以访问真实物理内存。
3.7 为什么需要虚拟地址空间?
- 直接使用物理地址的缺点:
- 用户可以访问任意内存,可能无意或有意破坏系统,造成系统崩溃。
- 多程序运行困难,程序1使用了1xxx,程序2再去给1xxx赋值就会造成程序1崩溃。
- 使用虚拟地址的优点:
- 程序可以使用连续的虚拟地址,访问不连续的物理地址。
- 可以使用虚拟地址来访问大于物理地址的内存。
- 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。
四 虚拟内存
4.1 什么是虚拟内存?
虚拟内存是一种存储模式,让我们可以处理比自身内存大很多的数据或文件。
存储在磁盘上的文件底层都是固定大小的page进行划分,cpu处理文件时不是一次性把文件加载到内存中,
而是用到的数据才会去加载。
虚拟内存的重要意义在于它定义了一个连续的虚拟地址空间(其实是多个物理内存碎片组成),并把内存拓展到了硬盘。
4.2 局部性原理
主要分为两种:
- 时间局部性:某个指令/数据一旦被执行/访问后,那么它在不久之后很可能再次被执行/访问。
- 空间局部性:一旦某个存储单元被访问后,其附近的存储单元也将被访问。
4.3 虚拟存储器
根据局部性原理,可以把程序一部分装入内存,一部分装入外存(硬盘,u盘等),当访问的信息不在内存时就从
外存调入,这个看起来比实际内存大很多的存储器就叫——虚拟存储器
4.4 虚拟内存的技术实现
虚拟内存建立在离散分配内存管理方式的基础上。
1.请求分页存储管理
2.请求分段存储管理
3.请求段页式存储管理
不论如何实现,我们一般都需要:
- 一定容量内存与外存,载入程序只把部分程序装入内存,然后程序就可以执行了。
- 缺页中断:如果指令或数据不在内存(缺页或缺段),处理器通知操作系统调相应的页或段进内存,继续执行程序。
- 虚拟地址空间:逻辑地址转换成物理地址。
4.5 页面置换算法
当发生缺页中断时,当前内存没有空闲页面,就必须将一些页面移除内存,页面置换算法就是淘汰页面的规则。
- 最佳页面置换算法(OPT):淘汰以后永不使用或长时间不会被再访问的页面,该算法暂未实现。
- 先进先出页面置换算法(FIFO):最先进入的先淘汰。
- 最近最久未使用页面置换算法(LRU):最久未使用的淘汰。
- 最少使用页面置换算法(LFU):最少使用的淘汰。