进程通信
1、管道
管道是一种单项传送数据的通道。两个进程如果要进行双向通信,需要创建两个管道,一个负责写(读),一个负责读(写)。
2、信号
信号是向进程发送的一个通知,当进程收到通知后,进行相应的处理。
信号是一个整形数据,不同值代表不同的意义。常见有:
https://blog.youkuaiyun.com/XiaoTong_zZZ/article/details/106556716
1)向进程pid发送信号sig:
int kill(pid_t pid, int sig);
2)注册信号处理函数:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
死锁
死锁的4个条件:
1、互斥条件
互斥占用资源,独占资源。
2、不剥夺条件
进程占用的资源不能被其他进程剥夺
3、部分分配条件
进程边运行边申请资源,临时需要临时分配。区别于全部分配。
4、环路条件
多个进程构成环路:进程中已占用的资源被前一个进程申请,而申请的资源被后一个进程占用着。
内存管理
1、内存映射
1.1 静态地址映射
在程序装入系统时,由操作系统完成逻辑地址到物理地址的映射。
物理地址(MA) = 进程基地址 (BA)+ 逻辑地址(VA)
特点:
1)程序运行之前已经确认了地址;
2)程序装入后不能移动(如果移动必须放回原来的位置);
3)程序占用连续的物理地址空间。
1.2 动态地址映射
在程序运行过程中把逻辑地址转换为物理地址。
物理地址(MA) = 进程基地址 (BA)+ 逻辑地址(VA)
特点:
1)程序占用的物理地址空间可动态变化(要求及时更新BA地址值);
2)程序可以装在不连续的物理地址空间中(知道BA值即可);
3)便于多个程序访问共享代码段(共享代码段作为独立的一段存放)。
缺点:
1)硬件支持(MMU:内存管理单元);
2)软件复杂。
2 内存碎片
采用分区式存储管理的系统,在储存分配过程中产生的、不能供用户作业使用的主存里的小分区。
产生内存碎片:
内存被反复地分割和分配。
解决内存碎片的方法:
1)规定门限值
分割内存空闲区时,剩余的空闲分区小于门限值,空闲区不进行分割,整个地分配给用户。
2)内存拼接技术
将小内存空闲分区拼接成一个大的内存空闲区。
缺点:消耗系统资源,离线拼接(拼接时,作业需要暂停下来),重新定义作业。
3)解决程序需要连续地址空间才能运行的限制
分页、分段技术。
3 虚拟内存
程序运行的局部性:
程序在有限时间内访问代码和数据往往集中在有限的地址空间内。把一部分程序装入到系统中能够让进程运行一小段时间。
3.1 页式虚拟内存管理
进程虚拟内存空间和物理内存空间,分成相等的小片(如1k,2k,4k)。
进程小片——页(虚拟页或页面)
内存小片——叶框(物理页)
内存以页框为单位进行分配,而进程以页为单位装入内存。进程的页可以映射到内存空间不连续的页面上。
系统按需将一小段进程的页装载/移除到内存空间上。
页式内存映射
虚拟地址VA表示:页号P + 页内偏移量W
虚拟地址VA到物理地址MA的映射:VA ——> MA
1)算出VA对应的页号和偏移量:P、W(P = VA / pSize = VA>>n(页大小:pSize = 2^n),W = VA % pSize = VA & (2^n - 1));
2)查页式内存映射表得到页框号P‘ = pTab[P];
3)根据内存页框号和偏移量得到物理内存地址:MA = P' + W = pTab[P] * pSize + W;
页式映射表 | ||
页号 | 页框号 | 其他特性 |
0 | 5 | |
1 | 20 | |
2 | 8 | |
3 | 45 | |
... | ... | ... |
页面共享原理:
在不同的进程页表中,填上相同的页框号,多个进程访问的是同一份物理内存;页面共享在内存中只有一份真实的内存,从而节约了内存空间。
缺页中断:
当读取的页框号不在页表中,且页表该页号条目所对应的中断标志位有效,将产生缺页中断,中断服务程序将到辅存中将数据加载到内存中。
缺页率f = 缺页中断数 / 访问页面总数;
命中率 = 1 - f
页面淘汰策略:
当页表满时,选择哪一个页面淘汰掉的方法。
页面抖动:
页面在内存和辅存间来回切换的现象。
抖动将影响系统效率,降低页面命中率。
3.2 段式虚拟内存管理
定义
把进程按照逻辑意义划分为多个段,每段有段名,段的长度不定(如:代码段、数据段、堆栈段)。
内存分配:
以段为单位来装入,每段分配连续的内存空间。但段与段直接不要求连续。
段式虚拟地址表示:
段式虚拟地址VA = 段号 S + 段内偏移 W
VA:(S, W)
段式地址映射为物理地址:
采用段表来映射。
段表包含:段号S,段长L,基地址B,扩展信息
映射过程:
1)通过虚拟地址VA分离出段号及偏移量:S,W;
2)查段表得到在内存中的段基地址B和段长L(判断访问是否越界:0<=W<L);
3)得到物理地址MA = 基地址B + 段内偏移W;
段的共享:
共享段在内存中只有一份存储;将共享的段被各个进程映射到各自的段表中;需要共享的模块可以设置为单独的段。
段式映射的缺点:
1)需要连续的内存空间来存储一个段;
2)段的最大尺寸受限于内存的大小;
3)在辅存(硬盘)中管理可变长度的段比较困难。
3.3 段式系统与页式系统的区别
地址空间:
页式地址空间是一维空间,而段式地址是二维空间(在段内是一维空间,段与段之间是二维空间)。
其他区别:
1)段长可变;页面大小固定;
2)段的划分有意义;页的划分无意义;
3)段方便共享;页不方便共享(页长固定,可能只是想共享页内某些部分);
4)段用户可见(程序员可以指定段);页用户不可见;
5)段偏移有溢出;页偏移无溢出。
3.4 段页式虚拟内存管理
定义:
在段式管理系统中结合页式管理系统,即在段中分页;
段页式系统地址表示:
虚拟地址VA = 段号S + 页号 P + 页内偏移量W;
内存按页划分,按页装入。
段页式地址映射:
1)同时采用段表和页表进行映射;
2)系统为每个进程建立段表;
3)系统为每个段建立页表;
4)段表中给出了每段的页表基地址和页表长度(段长);
5)页表中给出每页对应的页框(号)。
3.5 段页式内存映射理解
https://blog.youkuaiyun.com/m0_37984066/article/details/109199862
驱动程序
驱动程序是按照设备的特性来完成操作系统标准设备操作接口的功能实现。
1、在使用设备之前需要完成设备的装载,而使用完后需要卸载设备;
2、在设备安装时,完成操作系统设备标准操作接口到设备操作接口的映射,如:write--->MyWrite,read--->MyRead等。
3、在linux中按照文件的方式来操作设备,称为设备文件
文件系统
1. 定义
文件系统是提供管理文件的机构(创建,撤销,读写,修改,复制和存储等)。
文件系统最重要的功能:通过文件名来访问文件。
2. 文件的物理结构
是指文件在存储设备上的存储方式。主要目的是降低操作文件的时间。
分为:连续文件,索引文件,串联文件 3种类型。
连续文件:第一个存储块块号+文件长度(即索引区+数据区)。存储空间连续;
索引文件:索引表所在存储块的块号,该索引表保存了指向存储实际内容的索引块号。存储空间连续/不连续。
串联文件:文件名+第一个存储块块号,在存储块的尾部保存了下一个存储块的块号(即链表)。存储空间不连续。
2.1 FAT文件系统
FAT是串联文件系统,维护了FAT表来索引文件块;
扇区:
磁盘最小的可寻址存储单元(512字节)。
簇:
设备最小的可存取单元,由固定数量的扇区来组成。
FAT表的元素数量与簇的数量相等。
磁盘容量 = FAT表长度 * 簇的大小 = 2^N(N表示FAT表的位宽) * 扇区数量 * 扇区大小(512)
如FAT16的磁盘容量为2G = 2^16 * 64 * 512 = 2 * 2^30
FAT16是簇作为单位进行管理,每个簇最大64个扇区。
FAT16文件系统格式化后的存储格式:
启动扇区 | FAT1表 | FAT2表 | 根目录 | 其他目录和文件 |
3. 存储空间管理
记录磁盘使用情况,存储和分配、回收存储空间。
记录空闲存储块的方法:
1)空闲文件目录(在外存中专门的空间存储空闲存储块的表项信息);
2)空闲块链(把空闲块通过链表来连接起来);
3)位示表(申请一定字节的空间,每1位表示该位对应存储块的空闲和占用情况:0 表示占用,1表示空闲)
3.1 文件目录
文件名址录,记录了文件名和存放地址的映射关系。
文件属性记录在文件目录中。
目录文件:是文件目录以文件的形式存储在外存中。