操作系统笔记——设备的分配与回收
Posted 玛丽莲茼蒿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统笔记——设备的分配与回收相关的知识,希望对你有一定的参考价值。
一、设备分配时应考虑的因素
1. 设备分类
- 独占设备:只能被一个进程使用。打印机
- 共享设备:可以被多个进程同时(微观上交替)使用。磁盘
- 虚拟设备:SPOOLing技术从独占设备虚拟出来的设备。(所以本质上还是属于独占设备)
二、静态分配与动态分配
静态分配:进程运行前,一次性给进程分配所需的全部资源,资源不满足的话就不让这个进程运行。这也是避免死锁的四个方法之一。
动态分配:进程运行中动态请求资源。
三、设备分配管理中的数据结构
每个设备一定从属于一个控制器,每个控制器也一定从属于一个通道(有多个通道)
1.数据结构(一)——设备控制表
2.数据结构(二)——控制器控制表
3.数据结构(三)——通道控制表
4.数据结构(四)—— 系统设备表
四个字段都很关键
- 设备类型:逻辑设备名
- 设备标识符:物理设备名
- DCT表指针
- 设备驱动程序入口
四、设备分配的步骤
1. 根据进程提供的物理设备名(设备标识符)在系统设备表中找到这个设备,找到这个设备的设备控制表。(物理设备名由程序员编程时提供,如/dev/video0)
2. 查看设备控制表的设备状态字段,如果设备空闲,就将设备分配给这个进程。如果设备忙碌,那么就将这个进程挂载到设备的等待队列当中。
然后根据指向控制器的指针字段,找到这个设备所属的控制器的控制器控制表。
3.对控制器控制表也进行忙碌与否的检查,空闲就分配,忙碌就将进程挂载到这个控制器的等待队列中。然后找到通道控制表
4.对通道控制表进行2、3一样的操作
只有当设备、控制器、通道都空闲时,这次设备分配才算成功,便可启动I/O设备传送数据。
以上设备分配步骤的缺点:程序员编程时需要提供物理设备名,比如说程序里写死了是“222”,然而我的设备换了一个物理名字比如叫“333”,这个程序就不能执行了,尽管有空闲的设备可以用。
五、改进
新增一个表:逻辑设备表LUT
相当于程序员只告诉了操作系统我需要的这个设备属于什么大类,然后由操作系统负责去系统设备表中查看这个大类中是否有空闲的设备,有的话分配给进程。
当然,这种逻辑设备名和物理设备名的映射关系也是由操作系统负责创建的。
----------------------------------写给我自己看的--------------------
改进之后,在工程实践过程当中仍然会碰到其他意外:
PS: 我们当时的问题和这个不一样,不是说写死了物理设备名。而是程序中写的就是逻辑设备名/dev/video0,但是当这个设备从系统中拔出再插进去的时候,系统可能给他换了一个逻辑设备名(比如从/dev/video0换成了/dev/video2,也就是说设备属于的大类video也分不同的大类,比如专门负责测温的video0,负责监控的video1等等),这时候程序依然需要改动。
以上是关于操作系统笔记——设备的分配与回收的主要内容,如果未能解决你的问题,请参考以下文章