百科问答小站 logo
百科问答小站 font logo



操作系统中到底是谁分配的资源? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

有人可能觉得这个答案比较不符合直觉或者教科书,那么在反对之前,先思考一下:

1. 如果没有驱动,硬件资源还存在吗?
2. 驱动是否是操作系统必需的一部分?

-----------------------原回答-----------------------

首先,得定义什么是资源。民用设备上的资源可能有:

1. 硬件资源:外设资源(键盘、鼠标、显卡……);总线资源(PCI/USB……);CPU资源(时钟、中断、CPU时间……)……
2. 软件资源:内存、信号量、地址空间、管道、共享内存……

对于现代民用操作系统来说,操作系统的主要意义可以总结为两句话:

1. 隔离任务(进程)间的数据,使其不能互相直接访问;
2. 授权任务(进程)间的通信,使其能够互相访问;


从这里可以看出来,操作系统的主要功能跟“资源分配”并不搭边。操作系统能直接掌控的“资源”主要都是软件资源,这些资源包括:

1、给进程分配内存资源和地址空间;
2、允许进程调度(信号量);
3、允许进程间通信。


一般来说,操作系统直接分配的资源只有这类软件资源,这些资源对于普通用户来说,其实并不是很直观的表现出来。对于普通用户可见的硬件资源,主要由驱动负责管理和分配,操作系统的主要角色是前面提到的“授权任务(进程)间的通信,使其能够互相访问”,操作系统起到的是一个中介的作用。

某个游戏希望显示一个图像,于是通过操作系统的进程间通信机制(某些API)去访问显示框架的API,最终把图像输出在屏幕上。也就是说,真正负责分配操作硬件工作的,其实是驱动,或者说,是驱动框架。操作系统只是负责传递用户任务(进程)的请求,操作系统对这些请求进行封装和隔离。

从宏观的角度上看,操作系统确实有能力决定某个进程是否有权限去访问某个硬件资源,但要说“分配”这个行为,主要还是驱动来做的,操作系统只是对驱动提供的资源接口进行封装和编号

当然,在没有驱动的时代,用户任务确实可以直接操作硬件,比如DOS时代的一些软件(游戏),都是自带驱动的,但现代操作系统已经基本上都实现了隔离。


所以,准确的说:

1. 软件资源:主要由操作系统负责分配和控制;
2. 硬件资源:主要由对应的硬件驱动(包括驱动框架)负责分配,操作系统在其中只是作为一个中介的角色存在。




  

相关话题

  苹果换自家M1 CPU能够那么快上市,为何国内操作系统和CPU公司为何不借鉴一下? 
  为什么Linux下要把创建进程分为fork()和exec()(一系列函数)两个函数来处理? 
  请问从技术角度来看是鸿蒙操作系统,木兰编程语言,方舟编译器哪个技术水平更高一些? 
  Linux怎么接受Python算出来的结果呢? 
  现在的 Linux 内核和 Linux 2.6 的内核有多大区别? 
  使用 32 位有符号整型存储 UNIX 秒数的程序,到 2038 年后该怎么办?又一个千年虫问题吗? 
  粘滞键是谁发明的? 
  CentOS软件那么老为什么大家还要用它? 
  杨元庆表示联想没必要做芯片和操作系统,这一想法主要出于哪些考虑? 
  在Windows下用VIM来写代码,会不会很蛋痛? 

前一个讨论
程序中的堆和栈大小是动态变化的,还是相对固定的?
下一个讨论
为什么坐动车需要二次检票?





© 2025-04-24 - tinynew.org. All Rights Reserved.
© 2025-04-24 - tinynew.org. 保留所有权利