目录
操作系统对上的管理
系统调用接口
用户操作接口(库函数)
系统调用和库函数的概念
结构层次示意图
总结
为什么要有操作系统❓
上次主要介绍了操作系统的"管理"和操作系统对下的管理。本篇主要是对上的管理。
操作系统对上的管理
- 用户可以直接访问硬件吗?
当然不能!!任何对硬件的操作都必须经过操作系统。像scanf/printf需要使用硬件,它们底层都必须使用操作系统
操作系统内包含软硬件的属性数据,用户可以直接访问操作系统吗?非常不合理!!让用户直接去操作系统内部访问软硬件资源属性数据不可能的。那我们怎样去访问操作系统呢?
就像银行不能让存钱的客户自己去银行的保险柜里放钱,然后把自己去银行的电脑上加上存钱的数额。这是非常危险和不切实际的。银行既要保证安全,又要让客户访问银行存钱。
- 所以银行就会开设一个一个窗口。只要根据窗口就可以访问银行存钱了。
- 同理可得,操作系统也开设一层软件层,也就是面向访问操作系统的窗口,称"系统调用接口"
可是有些爷爷奶奶年纪很大,不会自己去区号排序办手续存钱,这是银行就会提供"客户经理"和"前台"等服务去帮助它们。同样用户/程序员,觉得访问系统调用接口太过复杂。
- 编译器就把系统调用接口封装称"库/shell外壳/指令"等用户操作接口以便用户使用。
系统调用接口
- 系统调用是操作系统提供的函数
- 系统调用是一层软件层
- 操作系统不一样,提供的系统调用接口不一样
用户输入参数到系统调用接口,接口传给操作系统,操作系统返回参数给接口传给用户- 系统调用使整个操作系统处于一种安全/稳定的状态
- 使用户,安全稳定的获取到系统内的软硬件资源属性的数据
- 我们学习对"软件"的管理,对进程/线程/文件/信号的管理都是对系统调用接口的学习
- printf/scanf本质是调用系统调用对应的接口,由操作系统控制,通过驱动层写入硬件(显示器)
综上所述:用户访问操作系统直接/间接都使用了系统调用接口。那怎样间接访问系统调用接口呢?
用户操作接口(库函数)
- 间接访问系统调用接口:就是把系统调用接口封装成库直接提供给用户使用。
- 我们已经使用过的:C/C++标准库
- 我们下在VS2022的时候,下载时不仅仅安装了编译器,还安装对应的"库"
关于直接/间接使用系统调用函数直接关系到这段代码是否具有跨平台性。
- 不具有跨平台性:直接使用系统调用接口
- 具有跨平台性:使用用户操作系用的(库等)
- 因为系统调用接口时和操作系统配套的。操作系统是Linux,那么系统调用接口也是Linux。同理,操作系统是windows,那么系统调用接口也是windows。二者的系统调用不能跨平台使用。
- 例如:我们的printf在Linux或windows底下都可以使用,是因为虽然系统调用底层实现不一样,但是对上C/C++标准库(封装成库)是一样都可以使用,具有跨平台性。
系统调用和库函数的概念
- 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
- 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
结构层次示意图
总结
- 获取数据。
- 先描述,再组织。
- 对硬件的管理:操作系统是硬件的"管理者" ,所以用户访问硬件必须通过操作系统。
- 计算机管理硬件
- 描述起来,用struct结构体
- 组织起来,用链表或其他高效的数据结构
- 对软件的管理:进程/线程/文件/型号的系统调用接口。
- 驱动层。
- 系统调用层/用户调用接口。
为什么要有操作系统❓
- 以人为本
- 操作系统对下层进行软硬件管理工作。(手段)
- 操作系统对上层提供良好的(高效,稳定,安全)运行环境。(目的)
- 操作系统就是一个工具。
🙂感谢大家的阅读,若有错误和不足,欢迎指正。下篇进入【进程】的概念了。在学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把
进程组织起来!