操作系统
竹丶墨
博客:https://hzyjoel.gitee.io/gitbook/
展开
-
计算机体系结构/内存分层体系
计算机体系结构/内存分层体系 体系结构: 1、CPU 2、内存 3、外设 内存分层体系: 运行内存(主存)、磁盘(虚拟内存)。主存是在运行程序时所需要保存的数据空间,而磁盘是用于持久化数据保存的数据空间。 操作系统对于内存作用: 1、将具体的物理地址抽象成逻辑地址空间,使应用程序不需要依赖具体的物理储存 2、将程序运行时的内存分开防止相互影响。 3、对相同内存空间访问时的控制。 4、更...原创 2019-10-04 10:05:57 · 657 阅读 · 0 评论 -
文件系统
文件系统 定义: 持久性存储系统的抽象,文件即一个单元数据在操作系统的抽象 功能: 概念: 1、文件属性:名称、类型、位置、大小、创建者… 2、文件头:储存元数据中保存了每个文件的信息保存文件的属性,跟踪哪一块储存块属于逻辑文件结构的哪个偏移。 3、文件描述符:操作系统记录进程打开文件的索引编号。 4、块、扇区:操作系统每次访问按照扇区为最小单位,即使只修改1字节,也会修改字节所在的块,读取整个...原创 2019-10-04 11:18:41 · 152 阅读 · 0 评论 -
IPC
IPC 作用: 进程间通信 方式: 1、信号sinal函数:进程可以收到信号执行相应的反应如跳转到处理函数。当收到信号是内核态,返回到用户自定义处理函数就是用户态,这个过程中要修改寄存器处理地址。 2、管道:用于进程的数据交换。两个通信的进程需要是同一个父进程的fork,才能共用父进程的管道(一块内存区域) 3、消息队列:可以使不相关的进程进行通信 4、共享内存:读写可以被其他进程得知,但是数据必...原创 2019-10-04 11:15:17 · 184 阅读 · 0 评论 -
死锁
产生的原因: 多个线程持有彼此需要的资源不放手。 死锁特征(出现4个特征也有可能不会死锁): 1、互斥:一个时间只能有一个进程使用资源 2、持有并等待:进程保持至少一个资源正在等待其他进程持有的额外资源 3、无抢占:一个资源只能被进程完成后自愿释放 4、循环等待:进程互相等待各自的资源 解决死锁的方法: 死锁预防: 死锁避免: 银行家算法:死锁避免算法 死锁检测算法: 死锁恢复: ...原创 2019-10-04 11:14:10 · 406 阅读 · 0 评论 -
管程
目的: 分离互斥和条件同步的关注,针对信号量有可能产生死锁的问题,设置一个标志位实现在使用临界资源的线程等待时切换到另一个线程。 定义: 包含一个锁用来指定临界区,0或多个条件变量用来等待或通知信号量管理并发共享数据。每个条件变量维护一个等待队列,可以唤醒sinal和阻塞wait。 实现: 先执行释放锁的原因是因为实际应用中会在操作之前对管程代码加锁,因此在阻塞时需要先释放锁唤醒其他变量的队列。...原创 2019-10-04 11:09:55 · 137 阅读 · 0 评论 -
信号量
作用: 用于线程的互斥和同步。进程在进入时会采用p操作,退出时采用v操作(理解:假如有cpu同时可以跑3个线程,信号量初始为3,前三个线程进去后信号量减为0,再来一个线程信号量为-1了,这时候cpu中的进程跑完了信号量+1,查看线程信号量是否小于或等于0就可以知道是否有线程在等待。)P操作可以阻塞,V操作不能,信号量用于实现人为控制线程的先后执行。 信号量操作: p,v操作的实现: 信号量...原创 2019-10-04 11:08:50 · 156 阅读 · 0 评论 -
同步
进程间对资源的访问有可能会导致资源的错误,比如在资源加载到寄存器上还没修改到目标值就被另一个进程读取了。 原子操作: 是指一次不存在任何中断或者失败的执行,不会被其他进程打断。 同步方法实现: 1、临界区保护:进程间同时进入的一段可能改变状态的代码段进行限制,每次只允许一个进程进入。 ·禁用硬件中断:禁止了上下文的切换,因此不会有进程间互相交替进行的情况,自然也不会有并发资源的争夺。(缺点...原创 2019-10-04 11:05:07 · 74 阅读 · 0 评论 -
进程调度
进程调度 背景: 1、上下文切换 ·切换cpu的当前任务,从一个进程到另一个进程 ·保存当前线程的资源(寄存器等) ·加载下一个进程的上下文 2、cpu调度 从就绪队列中挑选一个进程作为下一个运行进程 ·通过调度策略选择进程 调度时机: 1、进程从运行状态切换到等待状态 2、一个进程被终结 3、可抢占,不可抢占 调度算法原则: 1、CPU利用率 :CPU处于忙状态所占时间的百分比 2...原创 2019-10-04 10:59:55 · 142 阅读 · 0 评论 -
进程
组成: 1、程序代码。 2、数据。 3、程序计数器。 4、寄存器的值,堆,栈。 5、一组系统资源(文件等) 进程与程序的区别: 1、进程是动态的,程序是静态的,程序是有序代码的集合,进程是程序的执行,进程有核心态/用户态。 2、进程是暂时的,程序是永久的。 特点: 1、可动态创建、结束。 2、进程可以独立调度并运行(并发即一个cpu一段时间执行一个进程、并行即多个cpu同时执行多个线程)。 3、独...原创 2019-10-04 10:56:59 · 93 阅读 · 0 评论 -
页面置换算法
页面置换算法 作用: 用于分配给进程内存页面不够时,决定那个页面要被置换,好的算法需要减少页面的换入换出次数。特殊的对于操作系统的某些关键运行内存地址需要对页的锁定标志位置为1,防止被置换。 1、最优页面置换算法: 当缺页发生时,对于保存在内存的每一个逻辑页面计算在他下一次访问前需要等待多少时间,从中选择等待时间最长的那个作为置换的页面。(很难实现但可以作为标准评价其他算法) 2、先进先出...原创 2019-10-04 10:53:42 · 363 阅读 · 0 评论 -
虚拟内存
虚拟内存 背景: 运行内存不够,需要借助物理内存储存临时的数据。针对背景优化的技术: 1、覆盖技术:将程序独立的模块按运行时间分块(不会同时运行和互相调用),共享同一块内存,在运行完后覆盖成下一个相应的程序。 2、交换技术:将暂时不能运行的程序送到外存中。换入换出时的存储位置可能不同(需要使用动态地址映射),开销太大。 3、虚存技术:将程序中的一部分内容放到内存中,依赖于程序的局部性原理(时间局部...原创 2019-10-04 10:37:56 · 142 阅读 · 0 评论 -
非连续内存分配
非连续内存分配 作用:减少连续分配产生的内存碎片,做好内存管理,可以实现共享数据(分配在同一个内存上)。 硬件方案实现: 1、分段 通过对程序中的连续的逻辑空间对应到分散的物理地址空间,实现内存管理。如代码中的堆栈映射到不同的物理地址空间(实现数据隔离)。分段对应方案: 连续的逻辑地址需要通过段寄存器+地址寄存器分离成不连续的物理地址,每一段逻辑地址应该加上不同的偏移量,段寄存器表示段号,地址寄存...原创 2019-10-04 10:30:34 · 177 阅读 · 0 评论 -
连续内存分配
连续内存分配 背景: 通过连续的内存分配给应用,如A(0-20)B(20-30)C(30-40) 产生的问题:内存碎片(如果这个时候B结束了,那20-30这里的内存就无法使用到) 内存分配算法: 1、第一匹配分配:遇到第一个适合的内存就分配给应用(如第一个内存块是1k,那应用需求400bit遇到就直接分配) ·缺点:需要对空闲地址排序,需要对空闲块合并,容易产生外碎片 2、最优适配算法:寻找最相...原创 2019-10-04 10:12:52 · 209 阅读 · 0 评论 -
地址空间和地址生成
地址空间和地址生成 地址空间定义: 物理空间(硬件支持的地址空间) 逻辑地址空间(程序中代码自定义的地址空间)。 地址的生成: 一开始程序可以设定为自己的代码开始位置,当它进入主存执行时,需要把这个开始位置加上这段程序在主存中的起始位置才是对应在物理内存中的逻辑地址开始位置,然后再通过MMU(内存管理单元)去查找对应的物理内存地址。这样可以使代码中的所有内存都相互对应不会访问到错误的数据,还...原创 2019-10-04 10:10:53 · 208 阅读 · 0 评论 -
多磁盘管理
多磁盘管理 作用: 对同时多个磁盘协同工作的内存管理 磁盘读取的原理 通过指针寻道,然后扫描磁道上的数据的信息 实现技术: 实现原理: 1、每次读取的数据在不同的磁盘上,每次读取就可以一起读取并行访问。 2、写操作时写入不同的磁盘,写这样一个硬盘失效可以使用另一个硬盘。 3、使用额外的磁盘做奇偶校验,用于磁盘恢复。 磁盘调度优化: 1、访问数据的开销: 2、磁盘调度算法: ·FIFO:顺序...原创 2019-10-04 11:20:46 · 588 阅读 · 0 评论