1.引论

操作系统处于中间层向下管理和控制硬件,向上为外层软件和用户编写的程序提供使用方便、功能强大的服务。
就如下面视图所展示:
(Kernel mode:内核态 User mode:用户态)

image

操作系统的任务是:

  • 使用户方便的使用计算机。
  • 使计算机硬件高效的运行。

操作系统提供的抽象概念

操作系统为用户管理硬件资源,用户不需要面对硬件资源,而是面对操作系统提供的各种抽象概念进行操作。
操作系统提供的抽象概念主要有以下几种:

进程

进程我的理解是:进程是程序运行的载体,就好像杯子是水的载体一般。
进程包含了程序运行所需要的所有信息。(可执行程序,程序的堆栈等等)
与一个进程有关的所有信息,除了该进程自身地址空间的内容以外,均存放在操作系统的一张表中,称为进程表(数组或链表结构)。

地址空间

现代操作系统是多道程序设计的,就是说在内存中存在多个程序。
这时候就需要一个机制来隔离不同的程序,避免干扰。
现代操作系统通常使用虚拟内存技术。操作系统可以把部分地址空间装入主存,部分留在磁盘上,在需要时再交换它们。

文件

支持操作系统的一个重要的概念是文件系统
文件系统隐藏了磁盘和其他I/O设备的细节,统一提供了文件这个抽象的概念。

系统调用

如最上面的视图所展示的那样,操作系统运行在内核态(一般都是)。
所以操作系统所提供的抽象概念也在内核态。
但是一般的过程调用是进入不了内核态的,只有系统调用可以进入内核态,使用操作系统所提供的抽象概念。
除了进入内核态,系统调用和一般的过程调用没什么区别。如下图:

image

第5步应为read调用的系统调用编号;
第7步为根据系统调用编号在一张指针表中找到相应的程序运行

系统调用比一般的过程调用要复杂得多,所以一般操作系统会提供库调用,把系统调用包装的简单一些,如上面的那个图,4过程是read库调用,5才是read系统调用。

基本过程就是下面这个:
1参数nbytes压栈
2参数&buffer压栈
3参数fd压栈
4对库过程read进行实际调用
5把系统调用的编号放在寄存器中
6执行TRAP指令,切换到内核态,在内核中一个固定地址开始执行
7内核代码检查系统调用编号,发出系统调用处理指令
8系统调用句柄执行
9控制返回给用户空间库过程
10以通常的过程调用返回的方式,返回到用户程序
11用户程序清除堆栈空间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,177评论 0 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,718评论 25 709
  • 1 从动心,到白头,愿红豆,佑长久。洱海之大,白塔之尊,大理木府,丽江古茶。都是极美的。 秋后伏天,阳光毒辣,灵山...
    窗花阅读 235评论 0 0
  • 刺骨的寒风呼啸,漫天的雪花肆意飞舞,远远传来的几声兽吼似乎也在昭示着此地的寒冷与荒凉。 在这人迹罕...
    谢越阅读 454评论 0 0
  • by孤鸟差鱼 1 我看着朋友坐在桌边叹着气,我从来没有见过她这个样子。她一向大大咧咧的,没心没肺着,可以把每一天都...
    孤鸟差鱼阅读 446评论 0 3