操作系统知识
操作系统
一. 用户态和内核态

1. 用户态:用户态运行的进程可以直接读取用户程序的数据
系统态:运行系统态的进程几乎可以访问计算机上的任何资源,不受限制
2. 系统调用的概念:与系统态级别资源有关的操作(文件管理/进程控制/内存管理),都必3. 须通过系统调用的方式向操作系统提出服务请求并由操作系统代为完成
二. 进程和线程
1. (老生常谈了)一个进程有多个线程;多个线程共享堆和方法区的资源,但每个线程有自己的程序计数器,虚拟机栈,本地方法栈。
2. 线程是进城划分成更小的单位。最大的不同在于各进程基本是独立的,但是线程则不一定;
3. 进程的状态
(1) 创建(new)正在被创建,尚未就绪
(2) 就绪(ready)进程已经获取了除处理器外一切的资源,等待时间片分配即可运行
(3) 运行(running):进程在处理器上运行
(4) 阻塞(waiting):(eg:等待IO操作/等待某一事件)暂停运行,即使处理器空闲也不能运行。
(5) 结束(terminated);进程从系统中消失
4. 进程间通信的方式
概念:内核提供的进程间交换数据的机制
(1) 匿名管道pipes

本质是内核缓冲区,进程以先进先出的方式读取数据;
只支持单项数据流(半双工),需要全双工的话得有两条管道,只能用于有亲缘关系的线程。传输的是无格式的字节流
阻塞问题:创建时直接返回fd,读写需要确定对方的存在,否则将退出。
(2) 有名管道name pipes
提供一个路径名,以有名管道的文件形式存储在文件系统中。所以即使进程不存在亲缘关系,也可以访问该路径。
阻塞问题:打开需要确定对方是否存在,否则阻塞。(以读方式打开某管道,在这之前必须以写方式打开,当然打开的那个进程是不是读的那个进程都是OK的)
(3) 信号 singal
任何时候都可以发送,无需知道该进程的状态。
如果当前进程违背执行,则内核态会保存信号,直到该进程回复
信号是可以被阻塞的,阻塞后信号被延迟传递,直到阻塞被取消

(4) 消息队列 message queuing
存放在内核中的消息链表;由消息标识符表示
允许一个/多个进程向他写入/读取消息
可以实现消息的随机查询
客服了信号承载信息少,缓冲区大小受限等问题。
Posix/system v
无名管道是存在于内核中的文件,有名管道则是在磁盘中;信号和消息队列都是在内核中。只有在内核重启/删除某个消息队列,它才会真正的被删除
(5) 信号量 semahores
是一个计数器,用于多进程对共享数据的访问。
(6) 共享内存 shared memory
多个进程可以直接读写同一块内存空间,不需要数据的拷贝,效率较高

(7) 套接字 socket
此方法主要用于在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程
三. 操作系统内存管理基础
https://zhuanlan.zhihu.com/p/152119007 这个不错,但我不记笔记了;
1. 内存管理的作用:内存的分配与回收;将逻辑地址转化为响应的物理地址
2. 常见的内存管理机制:连续分配方式/非连续分配方式
块式管理:将内存分为固定大小的块,一个块包含一个进程(太过古早,现在没有人用了)
段式管理:页式管理的优点是提高利用率,但实际上每一页都没有意义,段式管理把内存分为一段段,每一段的空间都比页小。最重要的一点在于每个段定义了一组逻辑信息,例如main(主程序段),x(子程序段)等等。通过段表对应逻辑地址和物理机制。
A. 解决的问题:程序本身不需要关心具体的物理内存地址
B. 分段的缺点是容易产生内存碎片,比如1G内存,有三个程序在用,然后关闭 一个,但这个空间不是连续的,而是两个碎片,这样就会导致要一个需要200mb内存的程序无法打开。
这时候就需要内存交换(swap):先把音乐文件写到磁盘,然后空出来的内存空间就是完整的,这时候再分别从磁盘写入以及打开程序。
但分段缺点显而易见,首先是硬盘的访问速度比内存慢;其次内存碎片是很容易产生的,一旦产生就要swap,会有性能瓶颈;最后,如果需要交换的程序占用空间很大,那机器会卡顿

页式管理:将内存分为许多的页(小于段),通过页表来对应逻辑地址和物理地址。
A. 分页管理内存空间都是预先规划好的,就不会产生内存碎片?
B. 内存空间不够,操作系统会把最近没使用的程序swap out(需要的时候再加载进来),然后把需要运行的swap in。

段页式管理:结合了段式管理和页式管理的优点;先把内存分为若干段,再分为若干页。段页式管理当中段与段段内部和段都是离散的
(1) 第一次访问段表,得到页表起始地址
(2) 第二次访问页表,得到物理页号
(3) 第三次把物理页号和页内位移组合,得到物理地址

3. 快表,多级页表;
(1) 现代操作系统可以同时运行非常多的进程,如果直接存储,那页表占用内存会很大,因此引入多级页表。
(2) 分页管理中很重要的两点
虚拟地址到物理地址的内存转化:
虚拟地址空间大,页表也会很大:
(3) 快表
用于解决虚拟地址到物理地址转化速度慢的产物。可以将快表理解为一种高速缓冲存储器。因为采用了虚拟地址,所以读写内存数据的时候cpu需要访问两次主存。有了快表,就只要访问一次高速缓冲存储器和一次贮存了。
(4) 快表查询流程
虚拟地址的页号来查快表-该页在快表中,就直接读取物理地址-不在就访问内存中的页表,同时把这个页的映射添加到快表中-快表满了就按淘汰策略淘汰一个表。
(5) 多级页表
避免全部页表一直放在内存中,属于时间换空间的操作。
4. 分页式和分段式的异同
同:都是为了提高内存利用率,减少内存碎片。
都是离散存储,但每个页和段中的内存是分散的(逻辑地址不会是连续的,可能有碎片??)看这个图

异:
页大小固定,由OS决定,段大小不固定(看上面的图就可以发现)
分页只是为了满足内存管理的需求,但是段是逻辑信息的单位
5. Cpu寻址,什么需要虚拟地址空间。
(1) 现代处理器寻址方式为虚拟地址;完成虚拟地址和物理地址之间转化的是memory management unit 内存管理单元。
(2) TLB(Translation Lookaside Buffer),专门用于改进虚拟地址到物理地址转换速度的缓存

(3) 为什么要有虚拟地址空间
A. 程序如果直接访问物理内存,寻址内存的每个字节,可能会有意无意破坏OS,造成OS崩溃
B. 想要同时运行多个程序就会很困难,因为两个程序可能同时给同一个内存地址复制,那么后来的会覆盖先来的并造成它崩溃。
C. 虚拟内存的优势:
程序可以使用(相邻的)虚拟地址访问内存中不相邻的大内存缓冲区
使用虚拟地址虚拟地址访问大于可用物理内存的缓冲区
不同进程使用的虚拟地址彼此隔离,一个进程中的代码无法更改另一进程or OS使用的物理内存
四. 虚拟内存
1. 虚拟内容可用让程序拥有超过物理内存大小的可用空间。每个进程 拥有一片连续完整的内存空间,这样可以更有效管理内存,并减少出错。
它骗了应用程序,让他认为自己拥有连续可以使用的内存,实际上都是碎片哈哈啊哈渣男;哦还有的甚至不在内存上,在关外的磁盘上哈哈哈。大型程序是个单纯的孩子,被骗之后就更容易在内存上编写/运行了。
2. 局部性原理,昨天看了一丢丢,实际上代码实现是因为它初始化顺序是i过了再j
局部性原理就是说某个较短的时间短内(无穷小啊哈哈哈),程序执行仅限于某一小部分,程序访问空间页局限于某个区域。这也是一种时间换空间的策略。程序的世界里要么是时间换空间要么是空间换时间。
正式因为程序运行具有局部性原理,所以才可以只装入部分程序到内存就开始运行。
局部性原理分为时间局部性原理和空间局部性原理。
3. 虚拟存储器,又叫虚拟内存
基于局部性原理,在程序装入时,可以将程序的一部分装入内存,其他部分装入外存。因为外存比内存大很多,所以运行软件大小可以比计算机实际内存大小更大。就好像计算器给用户提供了一个比实际内存大很多的存储器—虚拟存储器
4. 虚拟内存技术的实现
它需要建立在离散分配的内存管理基础上
具体的实现方式包括
(1) 请求分页存储管理:最常用。在作业开始运行之前,装入当前要执行的部分段即可运行。加入运行过程中发现要访问的页面不在内存,则由处理器通知os将相应的页面调入内存。
(2) 请求分段存储管理:增加了请求调段功能/分段置换功能。过程和请求分页储存管理方式一样。
(3) 分页和分页存储管理有什么不同
根本区别为是否将一个作业全部所需的地址空间都装入主存。
(4) 请求段页式存储管理
无论是哪种实现方式,都要
(1) 一定容量的内存/外存,这个很好理解吧;将一部分装入内存剩下的先放在外存,然后程序就可以执行了
(2) 缺页中断:如果需要执行的指令尚未在内存,处理器通知操作系统把相应的页面掉入内存
(3) 虚拟地址空间:完成逻辑地址到物理地址到变换
5. 页面置换算法的作用和常见的页面置换算法
在发生却也中断后,如果当前内存没有空闲页面,os就必须在内存中移除一个页面。用来选择淘汰哪一页的规则叫做页面置换算法。
就是说是一种淘汰的规则咯
OPT(Optimal)最佳置换算法:淘汰未来永不使用的or长期内不再被访问的。这样可以保证最低的缺页率。但是人们无法预知,所以该算法无法实现(那你说个锤子)
FIFO(first in first out):先进先出,总是淘汰最先进入内存的页面,即驻留时间最长的。
LRU (least currently used):页面置换算法,赋予每个页面一个访问字段,记录和上次被翻牌子之间的间隔时间,访问字段最大就淘汰
LFU:Least frequently used:顾名思义,选择之前使用最少的并淘汰。如果

浙公网安备 33010602011771号