操作系统知识点

操作系统知识点总结

1.物理地址和逻辑地址

物理地址空间:内存,硬盘
逻辑地址空间:运行的程序拥有的内存范围

物理地址的生成:
CPU调用程序,传出逻辑地址,在MMU(内存管理单元)中有对应的逻辑地址-物理地址映射关系,根据映射关系找到物理地址,然后取出,通过总线传回CPU。

2.内存对齐

内存对齐:(结构体为每个成员对齐,联合体只保存占用空间最大成员的值)
目的:为了让CPU的访问效率更高,令一个变量的内存地址正好等于长度的整数倍,sizeof时,复杂结构就会使用内存对齐;如果未对齐,可能需要访问两次再拼接起来,对齐后以空间换时间,只访问一次就可以了。

32位	64位
默认	4	8
bool	1	1
char	1	1
short	2	2
float	4 	4
int		4	4
long	4	8
double	8	8

3.页面置换和上下文切换的区别

页面置换:缺页中断时内存满了需要置换其他页面来腾出空间存放即将调入的页
上下文切换:CPU通过时间片分配任务,当一个时间片用完需要切换进程或线程时,保 存上一个任务状态,以便下次切换可以继续任务(任务的保存和加载就是上下文切换)

4.并发和并行:

并发是一段时间里 多个应用程序同时运行
并行是一个时间点 多个应用程序同时运行

5.内存及分段分页

内碎片和外碎片:
内碎片是已经被分配出去却不能被利用的内存空间
外碎片是没有被分配 但是由于空间太小无法分配新的进程的内存空间

内存分配:
连续内存分配容易产生内外碎片
非连续(分页 分段 )

分段: 没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)
将程序中的内存划分成若干段

分页: 没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。
逻辑内存中连续的页 映射到物理内存中不连续的帧 页和帧大小相同
操作系统建立了页表 来实现从页离散储存到帧的映射关系(页表下标为页号 对应的内容为帧号)

页表:
驻留位(表示该页是否在内存中 如果不在产生缺页中断)
保护位(对该页做什么访问 可读写/只读)
修改位(如果放入内存的程序被修改 需要重写回硬盘 否则直接释放即可)
访问位(该页是否被访问过 多用于页面置换)

页表中逻辑地址到物理地址:
通过逻辑地址的页号和页偏移量,在页表中找到对应的帧号,根据帧号和帧的偏移量得到物理地址;

分段和分页的不同点:
1.目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,
它含有一组其意义相对完整的信息;
2.大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;
3.地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;
4.信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;
5.内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片
(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

虚拟内存:
在装入程序时 可以不把所有程序都放入内存 而只将当前需要执行的部分页面或段装入内存 后续如果需要访问硬盘中的内容 由处理器通知缺页或缺段并中断
操作系统 将程序调入内存后再次执行指令(如果内存满会执行页面置换算法 将待换内存换入内存)

页面置换算法:
最优置换算法:一种理想的算法 选择置换在下次访问时 等待时间最长的页
先进先出算法:置换驻留时间最长的页面(调出可能是经常使用的)
最近最久未使用算法(LRU):置换最久没被访问的页
LRU的实现:使用一个栈 每次访问一个页 将标号压入栈顶 然后抽出栈中重复的页号 栈底就是要被置换的页
最少使用算法:置换使用次数最少的页
CLOCK置换算法:将所有页面设置成循环队列 当页面被访问时 将访问位置为"1" 需要置换页面时 如果访问位是"1" 则将其置为"0"
并移动到下一位 如果访问位是"0" 则置换出去

6.进程和线程

进程的定义:
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程的定义:
线程是进程当中的一条执行流程

********************************在资源组合的角度看 进程把相关的资源组合起来 构成了一个资源平台 而线程是资源平台里的一条执行流程

进程的状态:
就绪状态:进程已获得处了处理机以外的所需资源 等待处理机运行
运行状态:进程正在处理机上运行
阻塞状态:进程等待某种条件而暂停运行

进程状态的转换:(只有4种)
运行->就绪:运行的进程时间片用完,让出CPU,进入就绪态
运行->阻塞:发生IO请求或者等待某种资源
阻塞->就绪:进程获得了等待的资源,进入就绪态
就绪->运行:就绪的进程获得了CPU时间片,进入运行状态

进程和线程的区别:
1.不同的进程有独立的地址空间 同一进程中的线程共享地址空间 一个线程的崩溃可能导致所有线程崩溃
2.资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段
(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
3.进程是资源分配的最小单位,线程是CPU调度的最小单位
4.进程上下文切换开销大,线程开销小

多进程和多线程的应用场景:
1.需要频繁创建和销毁的用线程:web服务器
2.需要大量计算的使用线程(消耗CPU多,切换频繁)
3.强相关处理用线程,弱相关处理用进程
4.扩展到多机分布用进程,单机多核分布用线程

上下文切换:
CPU将资源从一个进程分配到另一个进程(进程切换比线程代价高)

进程的调度算法:
1.FIFO:
先来先调度 先请求CPU的进程先分配到CPU
2.SJF(最短作业优先调度):
等待时间短的先调度(抢占:如果运行时有更短时间的进程入队 可以抢占到队列里)
3.优先级调度:
优先级高的进程先分配到CPU
4.时间片轮转调度:
设置一个时间片 每个进程轮流调用cpu时间片的时间 如果进程完成提前调用下一个
5.多级队列调度:
将就绪队列分成多个独立队列 每个队列从高到低有固定的优先级 每个队列可以采用不同的调度算法
6.多级反馈队列调度:
多级队列的基础上 增加了反馈机制 进程可以改变优先级 等待时间长的进程可以提高优先级 占用CPU时间长的进程降低优先级(可以用时间片多少来衡量)

线程的竞争条件:(竞态)
多线程并发的时候存在的问题
临界区:
线程中访问共享资源的那一段代码
互斥:
一个进程在访问临界区时 不允许其他进程访问
原子操作:
一次不存在中断或者失败的执行
饥饿:
一个可执行的进程 被调度器持续性的忽略 执行不了

7.进程和线程的通信

进程之间的通信:
1.管道:(单向)
用于父进程和子进程的通信 只能传输字节流
2.命名管道:(FIFO)
半双工通信,允许无亲缘关系的进程间通信
2.信号:
收发信号进行通信,用于通知进程某个事件已经发生
3.消息队列:
消息的链表 可以相互传输结构化的数据 它克服了上两种通信方式中信号传递信息少,管道只能字节流的缺点
4.共享内存:(进程间通信最快的方式)
多个进程可以访问同一块内存 某个进程在共享内存做出的改变可能会影响到其他进程(可使用信号量同步)
5.信号量:
信号量是一个计数器,可以控制多个进程对共享资源的控制,作为一种锁机制,防止一个进程在访问共享资源时其他进程也访问,用于进程间和一个进程中的不同线程通信
6.套接字(socket):
和上述进程通信的区别是可以与其他机器的进程通信

进程同步的方法:(进程同步是一种低级通信,高级通信指数据的交换)
1.信号量
2.管程
3.互斥量
4.文件锁

线程之间的通信:(因为同一进程的线程共享资源,所以线程通信主要用于线程同步,所以没有数据交换的通信方式)
1.临界区:
保证在某一时刻只有一个线程能访问数据,其他进程访问会被挂起;
2.互斥量:
和临界区类似,互斥对象只有一个,但是可以用于和其他进程实现资源的安全共享,资源消耗也比临界区大;
3.信号量:
允许多个线程同时访问资源,但是限制最大同时访问数量,增加一个线程访问,当前可用数量就减一,到0就拒绝访问
4.事件
用来通知线程有一些事件已发生,从而启动后继任务的开始。可以实现不同进程的同步;(2、3、4都可以实现不同进程的线程同步)

8.死锁

死锁:
两个或者多个并发的进程中 如果某个进程持有某个资源 而等待其他进程保持的资源 变成了两个进程无限期阻塞 相互等待的状态

死锁产生的必要条件:(死锁有这四个条件 但是有四个条件不一定是死锁)
1.互斥:
一个时间只能有一个进程使用资源
2.持有并等待:
进程至少持有一个资源并且在等待其他进程持有的额外资源
3.非抢占:
一个资源只能在进程完成任务后自愿的释放
4.循环等待:
若干进程形成了一种头尾相接环形等待的情况

死锁处理的方法:
1.死锁预防:核心思想是打破死锁的四个必要条件
互斥:允许进程同时访问资源(有些资源就是不可以同时访问 不现实)
持有并等待:让进程持有全部资源或者一个都不持有(降低资源利用率)
非抢占:当一个进程占有某些资源 但申请新资源无法满足时 释放自己占有的资源让其他线程使用(降低性能)
循环等待:所有资源进行排序 要求进程按照资源的顺序发出请求 不会产生环形回路
2.死锁避免:动态的检测资源分配状态 使系统处于安全状态(系统安全状态:所有的进程使用安全序列)
<P1…Pn>安全序列:对每个Pi 需要的资源都在0~Pi-1的进程中
3.死锁检测:通过定期使用检测算法检查是否产生死锁(通常3和4一起使用)
4.死锁恢复:常用进程终止或者资源抢占
进程终止:终止一个或多个进程打破循环等待(死锁进程全部终止 / 一个一个终止直到死锁解除)
资源抢占:进程可以从其他死锁的进程抢占一个或多个资源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值