设备控制器:硬件,控制1到多个设备,接收cpu发来的命令,控制设备工作。
与设备的接口(可多个):数据线,状态线,控制线,普通信号线,这三线用于设备和控制器通信
与处理机接口:数据线,地址线,控制线,这是总线,数据线连数据寄存器和状态寄存器
含寄存器存放命令和参数,含命令译码器,含数据寄存器(数据总线cpu与控制器传数据),含状态寄存器(记设备状态),缓冲器等。
I/O通道:硬件,通道程序(io指令组成的程序)
cpu的任务交给通道,cpu向通道发命令,通道执行某通道程序,通道完成后发中断。通道是特殊处理机,你可以认为多了几个cpu了,特殊(它只能执行io指令,cpu什么指令都能执行)
单通道:一通道多控制器和一控制器多设备, 设备占用了控制器和通道,导致其他共享这两者的设备无法运行
多通道:在单通道基础上,控制器也可以挂在多通道上,设备也可以挂在多控制器上
io控制方式:
程序io(不用),cpu在循环测试
中断:比如数据已经读到控制器的寄存器了,控制器发出中断,中断处理程序里取数据到内存
DMA(直接内存访问):基于中断,块设备不能这样搞了(每个字节都等到中断处理程序里来取),设备能不能访问内存(直接把数据送入内存),linux的bio指定了内存页的片段(页高速缓存),io请求会直接将数据送入指定内存区域,完成后再发一次中断(页高速缓存有数据了,是不是要唤醒某进程了)
I/O通道:bio读的是物理连续的磁盘区域,那么读多个物理不连续区域到内存后再通知cpu呢,考虑用通道执行通道程序
软件:
设备独立性软件:高层软件,设备命名,保护,分配,释放,高速缓存中查找,类似vfs,逻辑设备名到物理设备名(程序是请求某逻辑设备的,程序请求打印机,转换成打印机3)
驱动(含中断处理程序):低层软件,将上层软件的io请求转换为具体要求发给控制器,文件系统逻辑块号转为扇区号
分配设备,再分配控制器,再分配通道,全分配好设备分配成功。
磁盘:盘面,磁道,扇区(每个磁道上扇区数相同),第5盘面第88磁道第22扇区这样定位,内密外疏,每个盘面都有一个磁头
寻道时间(磁头直线移动),旋转延迟时间(扇区移到磁头下),传输时间
预读,延迟写
文件系统:
open:不打开每次都要拿着文件路径去确定文件,打开后file能指向inode
磁盘块=文件系统(逻辑)块:对于文件系统来讲,磁盘并非是三维的,而是一维线性的,如我(文件系统)要读取8033223磁盘块数据,磁盘驱动会转换磁盘块号为盘面/磁道/扇区(多个)
vfs的inode:这是内存中按需创建的,各种文件系统都一样,ext2( 3/4一样)的ext2_inode:存于磁盘上的,不同文件系统不一样,甚至fat这样的都没有
file block number,给出一个文件偏移fbn就是确定的,但fbn怎么转换为磁盘块号呢,这要依靠具体的文件系统,文件系统需要在文件元数据结构内存储(fbn-磁盘块号映射)
inode 和 ext2_inode都有i_blocks表明文件占用磁盘块数,但ext2_inode还有i_block数组(长度为15,[0,11]存放fbn为[0,11]的磁盘块号,12,13,14 用作一级,二级,三级映射,就是12放的磁盘块号所对应磁盘存放接下来的映射)
逻辑磁盘=卷=分区,每个可以单独格式化和使用,供文件系统分配空间,如磁盘分为C D E F 四个卷
对文件的外存分配:
1 连续分配(文件的磁盘块都是连续的,那么fbn加个偏移就可能得到磁盘块号,不怎么用)
2 链接分配
隐式:每个磁盘块含下个磁盘块指针,我要找fbn为5对应的磁盘块,每个读取找下一个,太慢
显式:整个磁盘有张表,表项(磁盘块A-磁盘块A的下一块),文件元数据记录起始磁盘块,表放内存查找。FAT(File Allocation Table ),像windows的fat文件系统这样用。
3 索引分配:ext2就是混合索引分配,假设一个磁盘块1k,磁盘块号4字节,i_block[12]可放256个块号,寻找fbn为13对应的磁盘块号,为i_block[12]对应的磁盘块内偏移为4到7的四个字节
存储空间管理:现在我们文件扩容,需要一个新的磁盘块,从哪里找
空闲表法:表项(磁盘块号-连续空闲的块数),表明了多个空闲的区间
空闲链表法:磁盘所有空闲块链在一起或者磁盘所有空闲盘区(多个连续块)链在一起
位示图:一位代表一块是否空闲。
成组链接法:unix使用,https://blog.csdn.net/ajay666/article/details/73569654 看下如何分配其中三个盘块
文件共享:多用户(进程)在自己的目录下都可访问同一文件。
软硬链接实现文件共享,(符号)软链接强力在共享范围大,路径可指向任何计算机的文件,但需新建一个文件(inode),文件很小存放路径,每次读目标文件都要多级目录查找
undo redo,checkpoint,互斥共享锁等实现事务
操作系统接口
用户接口(联机: 命令行,批命令如shell 脱机:用户不能与计算机(自己的作业)交互,批处理作业,jcl)
命令解释程序:如shell:根据命令找到相应的处理程序,若为外部命令需外存调入处理程序。
程序接口 系统调用 cpu的两种状态如下
系统态(核心态或管态):此时运行的指令为特权指令,内存访问不受限。
用户态(目态):此时运行的指令为非特权指令,只能访问用户空间
系统调用可嵌套,linux使用128号软中断(内中断,异常)陷入内核
加密:加密算法E,加密密钥e,解密算法K,解密密钥k
对称:加密密钥和解密密钥相同或可通过加密密钥容易推断出解密密钥,DES(同密钥)
非对称:两者不同,难以互相推断,可公开一个密钥,Ee加密,Kk解密,也可以Kk加密,Ee解密,所以这两个密钥可公开任意一个,公开的那个叫公钥,RSA
易位法,置换法(一个字符替代另一个字符),两者混合
数字签名:发送者不能抵赖,接受者不能伪造且能核实是发送者签的
在非对称加密中,所有人都可以用公开的那个加密,某个人用私钥解密
在简单数字签名中,某个人用私钥加密,所有人都可公钥解密,所有人都能看到你的签名
保密数字签名:A和a一对,B和b一对,某个人用私钥a加密后,再公钥B加密,接受方先私钥b解密,再公钥A解密
数字证书:简单数字签名中,我本地存有A的公钥,B换成自己的公钥,B用自己的私钥加密,我再用B的公钥解密,我以为是A签名了,其实是B伪造A签名了,怎么办?
请A去CA申请个数字证书,数字证书含A的信息和用于校验A签名的公钥,然后CA用自己的私钥加个密,A每次签名的时候把数字证书也传过来,我接到后问CA要公钥解密数字证书,得到A的信息和公钥,用公钥校验是否是A的签名。