操作系统
-
- 管道/匿名管道(Pipes) :用于具有亲缘关系的父子进程间或者兄弟进程之间的通信。——半双工,文件是内存中的特殊文件
- 有名管道(Names Pipes) : 匿名管道由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道。有名管道严格遵循先进先出(first in first out)。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。——全双工
- 信号(Signal) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;
- 消息队列(Message Queuing) :存放在内核中,消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺
- 信号量:同步机制
- 共享内存(Shared memory):不同进程可以及时看到对方进程中对共享内存中数据得更新(共享内存的优缺点)
- 套接字(Sockets) :客户端和服务器之间通过网络进行通信
-
线程同步的方式:
- 互斥量(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个。
- 信号量(Semphares) :它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量
- 事件(Event) :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操
-
进程的调度策略:
- 先到先服务(FCFS)调度算法
- 短作业优先(SJF)的调度算法
- 高优先权优先调度算法
- 高响应比优先调度算法
- 时间片轮转法
- 多级反馈队列调度算法
- 应设置多个就绪队列,并为各个队列赋予不同的优先级,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小
- 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾。。。一直到最后一个对流就按照时间片轮转的方式调度
- 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行
-
虚拟内存
- 虚拟内存是计算机系统内存管理的一种技术,我们可以手动设置自己电脑的虚拟内存。不要单纯认为虚拟内存只是“使用硬盘空间来扩展内存“的技术。虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且 把内存扩展到硬盘空间。
-
CPU寻址、虚拟地址空间、为什么需要虚拟地址空间
- 使用虚拟寻址,CPU需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。
- 实际上完成虚拟地址转换为物理地址转换的硬件是 CPU 中含有一个被称为内存管理单元(Memory Management Unit, MMU)的硬件。——快表就在这里面
-
内存管理:为进程分配内存
-
内碎片:分配出去但是用不完;外碎片:还没有分配出去,但是太小没有进程可以用了;也内碎片:进程的最后一页经常装不满一块而形成了不可利用的碎片
-
页面和页表
-
页:将一个进程的逻辑地址空间分成若干个大小相等的片
-
物理块:内存空间分成与页面相同大小的若干个存储块;在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中,每个块中多个字节
-
页表:表目的自然序号对应于用户程序中的页号,表目中的块号是该页对应的物理块号,系统为每个进程建立一个页表
-
管理空块:位示图和内存页表
-
块表:类似于Cache,要不页表太大本身就占了很大的内存空间
-
-
分段存储:
-
段号和段内地址
-
段表
-
-
分段和分页的区别:
- 页是信息的物理单位,段则是信息的逻辑单位
- 页的大小固定且由系统决定,而段的长度却不固定
- 分页的作业地址空间是一维的,即单一的线性地址空间,分段的作业地址空间则是二维的
-
-
内存管理的页面置换算法:当内存空间紧张时,系统将内存中某些进程暂时移到外存,把外存中某些进程换进内存
- OPT页面置换算法(最佳页面置换算法):所选择的被淘汰页面,将是以后永不使用的, 或许是在最长(未来)时间内不再被访问的页面
- FIFO页面置换算法(先进先出页面置换算法):最先进入内存即在内存驻留时间最久的页面换出到外存
- LRU页面置换算法(最近最久未使用页面置换算法):选择最近一段时间最长时间未被访问的页面淘汰出内存;看一个最新使用时刻哪个离自己最远
- LFU页面置换算法(最少使用页面排序算法):访问频率
-
程序编译、链接、装入的过程:
- 可重定位装入的地址变换
-
静态重定位:并不允许程序在装入之后的运行过程中发生内存位置的移动
-
动态重定位:伴随程序执行进展来逐步进行程序中相关地址敏感指令及数据的地址修正
-
静态重定位:并不允许程序在装入之后的运行过程中发生内存位置的移动
-
动态重定位:伴随程序执行进展来逐步进行程序中相关地址敏感指令及数据的地址修正
-
- 可重定位装入的地址变换