文章目录

  • 一、程序是如何运行的?
  • 二、操作系统是什么?
  • 三、操作系统的范畴
  • 四、计算机硬件基础
  • 1、总线结构
  • 2、流水线结构
  • 3、存储结构
  • 4、中断机制
  • 五、用户态、内核态及系统调用
  • 1、两种状态的概念
  • 2、两种状态的优势
  • 3、用户态和内核态之间的区别
  • 4、用户态切换到内核态的方式
  • 六、微内核结构
  • 七、进程、内存和文件
  • 八、系统调用


一、程序是如何运行的?

操作系统基本概念_内核态


  程序可以执行在机器语言或汇编语言上编写,用这种被称为“低级”(我更愿意称其为底层)的语言编写出来的机器语言程序无需经过编译器的翻译就可以在计算机指令集上执行。如果是在汇编语言上编写的汇编程序,则只需要经过汇编器的翻译即可加载执行。

二、操作系统是什么?

操作系统是介于计算机硬件和应用软件之间的一个软件系统,操作系统的上层和下层都有其他的对象存在:

操作系统基本概念_系统调用_02


  操作系统管理计算机上的软硬件资源,如CPU、内存、磁盘等,使得不同用户之间或者同一用户的不同程序之间可以安全有序地共享这些硬件资源。

三、操作系统的范畴

  • 进程管理:进程控制、进程同步、进程通信、死锁处理、处理机调度等。
  • 内存管理:内存分配、地址映射、内存保护与共享、虚拟内存等。
  • 文件管理:文件存储空间的管理、目录管理、文件读写管理和保护等。
  • 设备管理:完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率。主要包括缓冲管理、设备分配、设备处理、虛拟设备等。
  • 操作系统基本概念_用户态_03

四、计算机硬件基础

1、总线结构

从概念上讲,计算机的结构是总线型的:布置一根总线将各种硬件设备挂在总线(Bus)上。

  • 所有的设备都有一个控制设备,外部设备通过控制器与CPU进行通信。
  • 所有的设备之间的通信也需要通过总线。
  • 操作系统基本概念_内核态_04

2、流水线结构

为了提高计算机的效率,人们又设计出了流水线结构:仿照工业流水装配线,将计算机的功能部件分为多个梯级,并将计算机的每条指令拆分为同样多个步骤,使每条指令在流水线上流动,到流水线最后一个梯级时指令执行完毕。

操作系统基本概念_系统调用_05

3、存储结构

除了指令执行单元外,计算机中的另一个重要部件是指令的存放单元,被称为存储架构。存储架构包括了缓存、主存、磁盘、磁带等。下图展示了一个包括寄存器在内的5级存储介质构成的存储架构。

操作系统基本概念_内核态_06


  从图中可以看出,寄存器的访问速度最快,容量最小,但成本却最高;磁带的访问速度最慢,容量最大,但是成本却最低。

4、中断机制

操作系统基本概念_系统调用_07


  中断定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。

  • 硬中断是由与系统相连的外部设备(比如网卡、硬盘、键盘等)产生的;硬中断可以直接中断CPU。
  • 软中断由程序中执行了引起中断的指令而造成的中断,也只有当前正在运行的代码(或进程)才会产生软中断.;软中断并不会直接中断CPU。

五、用户态、内核态及系统调用

1、两种状态的概念

内核态就是拥有资源多的状态(或访问资源多的状态),也称为特权态。而用户态则是非特权态,在用户态下访问的资源会受到限制。例如,要访问OS的内核数据结构,如进程表等,则需要在特权态下才能做到。如果只需要访问用户程序里的数据,则在用户态下就可以了。

2、两种状态的优势

  • 内核态:访问资源多,但可靠性、安全性要求高,维护管理都比较复杂。
  • 用户态:访问资源有限,但可靠性、安全性要求低,维护起来比较简单。
  • 操作系统基本概念_系统调用_08

3、用户态和内核态之间的区别

权限不一样。用户态的进程能存取它们自己的指令和数据,但不能存取内核指令和数据(或其他进程的指令和数据)

4、用户态切换到内核态的方式

  • 系统调用:程序的执行一般是在用户态下执行的,但当程序需要使用操作系统提供的服务时,比如说打开某一设备、创建文件、读写文件(这些均属于系统调用)等,就需要向操作系统发出调用服务的请求,这就是系统调用。
  • 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常
  • 外围设备的中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

六、微内核结构

从单一体和层次化结构的图中可以看出,操作系统的所有功能都在内核态下运行。但是,从用户态转为内核态是有时间成本的,这样就会造成OS的效率低下。于是,人们将操作系统的核心中的核心才放在内核态运行,其他功能都迁移到用户态运行,于是就有了下面的微内核结构。

操作系统基本概念_内核态_09

七、进程、内存和文件

  • 进程是OS中的核心概念,它指的是一个运动中的程序。一个程序一旦在计算机里运行起来,它就称为一个进程。进程与进程之间可以进行通信、同步、竞争,并在一定情况下可能形成死锁。
  • 内存是另一个核心概念,它是进程的存放场所。OS要做的就是对内存进行管理,使得数据读写高效、安全、简单。
  • 文件是操作系统提供的外部存储设备的抽象,它是程序和数据的最终存放地点。OS要做的就是让用户的数据存放变得容易、方便和可靠。

八、系统调用

系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。这些系统调用按功能大致可分为如下几类:

  • 设备管理:完成设备的请求或释放,以及设备启动等功能。
  • 文件管理:完成文件的读、写、创建及删除等功能。比如read、write。
  • 进程控制:完成进程的创建、撤销、阻塞及唤醒等功能,比如fork。
  • 进程间通信:完成进程之间的消息传递或信号传递等功能,比如pipe。
  • 内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能,比如brk、mmap。

例如,如果用户程序需要进行读磁盘的操作,在C程序代码中可以使用如下语句来操作:

result = read(fd, buffer, nbytes);

这个read函数是C语言提供的库函数,而这个库函数本身则是调用的操作系统的read系统调用。

操作系统基本概念_内核态_10