操作系统是运行在计算机上的软件程序,用来治理计算机硬件和软件资源。
操作系统内核负责
- 零碎内存治理
- 硬件设施治理
- 文件系统治理
- 应用程序治理
零碎调用
依据过程拜访资源的特点,把过程在零碎上的运行分为:
- 用户态:读取用户程序的数据
- 零碎态:拜访计算机的资源
运行程序根本是在用户态,须要拜访以下资源时,须要通过零碎调用的形式,向操作系统提出服务申请,由操作系统代为实现。 - 设施治理:实现设施的申请、开释、启动等
- 文件治理:实现文件的读、写、创立、删除等
- 过程管制:实现过程的创立、撤销、阻塞、唤醒等
- 过程通信:实现过程之间的消息传递或信号传递等
- 内存治理:实现内存的调配、回收以及获取作业占用内存区大小及地址等
过程与线程的区别
一个过程能够有多个线程,共享过程的堆和办法区(元空间),独享本人的程序计数器,虚拟机栈和本地办法栈。
各过程互相独立,各线程可能相互影响。
过程间的通信形式
- 管道 / 匿名管道:用于具备亲缘关系的父子过程间或者兄弟过程之间的通信。只存在于内存中。
- 有名管道:遵循先进先出,以磁盘文件的模式存在,实现本机任意两个过程通信。
- 信号:用于告诉过程某个事件曾经产生。
- 音讯队列:音讯的链表,寄存在内核中,由音讯队列标识符标识。要先进先出的生产,但能够随机查问。只有内核重启(即操作系统重启)或者显式删除一个音讯队列时才会被删除。和音讯队列相比,信号承载的信息量少,管道只能承载无格局字节流且缓冲区大小受限。
- 信号量:是个计数器,用于多过程对共享数据的拜访,用意在于过程间同步。
- 内存共享:使多过程同时拜访同一块内存空间,须要依附某种同步操作,例如互斥锁或信号量。
- 套接字:用于在客户端和服务器之间通过网络通信,套接字是反对 tcp/IP 的网络通信的基本操作单元。
线程间的同步的形式
- 互斥量:持有“互斥量(就是锁)”的线程才有拜访公共资源的权限。
- 信号量:容许同一时刻多个线程拜访对立资源,然而须要管制最大线程数量。
- 事件:wait/notify 通过告诉保障多线程同步
过程的调度算法
为了实现最大 cpu 利用率
- 先到先服务算法 FCFS:从就绪队列当选第一个过程,立刻执行移植到被阻塞放弃占用 cpu。
- 短作业优先算法 SJF:从就绪队列当选执行工夫最短的过程,立刻执行直到被阻塞放弃占用 cpu。
- 工夫片轮转调度算法:每个过程轮流执行一个工夫片
- 多级反馈队列调度算法:高优先级和短时间的优先实现。unix 零碎应用这种算法。
- 优先级调度:依据内存要求、工夫要求或其余资源要求制订优先级,依照优先级执行。
内存治理
内存的调配与回收(malloc 函数申请内存,free 函数开释内存)
地址转换:将逻辑地址转换成物理地址
内存管理机制
-
间断调配治理形式
- 块式治理
远古时代,内存分为几个固定大小的块,每个块中只蕴含一个过程,
-
非间断调配治理形式
- 页式治理
把主存分为较小的页,通过“页表”对应逻辑地址和物理地址,进步内存利用率。
- 段式治理
段比页更小,每个段定义一组逻辑信息,例如主程序段 main,子程序段 X,数据段 D,栈段 S,通过“段表”对应逻辑地址和物理地址。
- 段页式治理
每个段分成若干页
快表和多级页表
内存治理中,最重要的两点是:
- 虚拟地址到物理地址的转换要快
-
解决虚拟地址空间大,页面也会很大的问题
快表
页表的缓存。
多级页表
像树一样,一级页表映射二级页表地址,二级页表映射物理地址。
为了节俭页表占用的内存空间,未被实在占用的二级页表能够暂不创立。
或把二级页表放在磁盘里。
分页和分段的共同点和区别
- 共同点:都是为了进步内存利用率,缩小内存碎片。都是离散存储的,页内、段内都是间断的。
- 区别:页大小固定,由操作系统决定,段大小不固定,取决于以后运行的程序。段式逻辑单位,分为代码段、数据段等。
cpu 寻址
- 为什么要有虚拟地址:间接拜访物理地址会有意无意的造成操作系统和程序解体
- 应用虚拟内存的益处:能够应用相邻的虚拟地址拜访物理内存中不相邻的大内存缓冲区,第二条没看懂,不同过程应用的虚拟地址彼此隔离,一个过程无奈批改由另一过程或操作系统应用的物理内存。