第三章-----操作系统基本概念

来源:互联网 发布:淘宝店铺网红 编辑:程序博客网 时间:2024/05/29 09:56

第三章—–操作系统基本概念

标签(空格分隔): 操作系统之哲学原理


  • 第三章操作系统基本概念
    • 计算机硬件基本知识
    • 抽象
    • 内核态和用户态
      • 态势的识别
      • 内核态与用户态的实现
    • 操作系统结构
    • 进程内存和文件
    • 系统调用
    • 壳shell


计算机硬件基本知识

结构非常简单:先布置一根总线,然后将各种设备挂在总线上。所有的设备都有一耳光控制设备,外部设备都由这些控制器与CPU通信,而所有设备之间需要通过总线。

为了提高计算机的效率(一说吞吐量),人们设计出流水线结构,为了进一步提高计算机的效率,在流水线的基础上发明了多流水线,超标量计算和超长指令发射机制。
(让我们回忆计组的中断)


抽象

操作系统提供的是一个抽象。所谓的抽象就是在根本上存在但现实中不存在的东西。抽象不只是操作系统提供给用户的一个存在,也存在于操作系统内部,操作系统内部分为不同的模块,不同的功能块之间互相提供的也是抽象。


内核态和用户态

操作系统作为计算机的管理者,自然不能和被管理者享受一样的待遇,他应该享受更多的权限,为了区分不同的程序的不同权限,人们发明了内核态和用户态的概念。

内核态:就是拥有资源多的状态,或者访问资源多的状态,称为特态权。如果一个程序运行在内核态就可以访问计算机的任何资源。
用户态:就是非特权态,在这种状态下访问的资源将受到限制。

内核态和用户态各有优势:运行在内核态的程序可以访问呢更多的资源,但是可靠性和安全性要求更高,维护和管理都比较复杂。用户态访问的资源有限,但是可靠性安全性要求都比较低,自然很好维护。一个程序到底是在哪种状态下运行取决于对资源和效率的需求

一般来说,凡是牵扯到计算机本体运行的事情都应该在内核态中执行,只与用户数据和应用有关的东西则放在用户态执行。另外,对时序要求较高的操作,也应该在内核态完成。

  • CPU的管理和内存管理都应该在内核态实现
  • 诊断与测试程序也需要在内核态实现
  • 对于文件系统,一部分可以放在内核态,一部分可以放在用户态。文件系统本身的管理必须放在内核态,否则任何人都能够破坏文件系统。用户数据的管理则可以放在用户态。
  • 编译器。网络管理的部分功能编辑器用户程序等,自然都可以放在用户态下执行。

态势的识别

做一个标志,这个标志就是处理器的状态位。这个状态位是CPU状态字里面的一个字位。其实所谓的内核态,用户态实际上是处理器的状态而不是程序的状态,一个程序运行时,CPU是什么状态,这个程序就是运行在什么状态。

内核态与用户态的实现

对访问的限制是如何实现的?
要限制一个程序对资源的访问,需要对程序执行的每一条指令进行检查,而这种检查就是地址翻译。通过对地址翻译的控制,就可以限制程序对资源的访问。换句话说,当系统处于内核态时内核程序可以绕过内存地址翻译而直接执行特权指令。


操作系统结构

早期没有什么意识,就是几个库函数。当然当时也没有将这几个库函数叫做操作系统,想到了什么功能就加,没有一个统筹兼顾。显然当时是杂乱的,无结构的。
后来人们逐渐意识到这样不行。于是将各个功能分成不同的功能块,相互独立,又经过固定的界面相互联系。功能块之间可以相互调用。整个操作系统是一个巨大的单一体运行在内核态下。
再后来人们发现单一体的操作系统有很多的缺点:功能块之间关系复杂,修改功能牵一发而动全身。同时很容是造成循环调用,形成死锁。于是想到像人类社会一样进行层次关系分开。同样操作系统的所有功能都在内核态下运行。这样的操作系统同样有问题:

  • 所有服务都要进入内核态才能使用,而从用户态进入内核态是需要时间成本的,造成操作系统的效率低下
  • 随着操作系统越来越大,安全问题得不到保证

再后来人们又想了一个办法:微内核结构。只将操作系统的核心中的核心放在内核态运行,其他功能都转移到用户态运行。同时提高了效率和安全性


进程,内存和文件

一个程序一旦运行起来就成为一个进程,操作系统对进程的管理通过进程表来实现。进程表里放的是关于进程的一切信息。在任何时候,进程所占的全部资源,包括分配给该进程的内存,内核数据结构和软资源形成一个进程核。核快照代表的是进程在某一特定时刻的状态。

如果在LInux或者UNIX操作系统下编写程序,在出现分段错误的时候操作系统会自动进行核倒出。核倒出把所有的计算机状态保存在一个文件中,通过阅读这个文件的内容可以得知溢出时的进程状况。

  • 进程与进程之间可以通信,同步,竞争。并在一定情况下可能形成死锁
  • 内存是操作系统里面的另一个核心概念,是进程的存放场所。如何对内存进行管理,使得数据的读写具有高效率,高安全,高空间利用率和位置透明的特性是内存管理所要达到的目的。
  • 文件是操作系统提供的外部存储设备的抽象,是程序和数据的最终存放地点。如何让用户的数据存放更容易方便,可靠和安全是文件系统要解决的问题。

系统调用

系统调用就是操作系统提供的界面。(API)用户通过调用这些API获得操作系统的服务。

系统调用划分

  • 进程控制类
  • 文件管理类
  • 设备管理类
  • 信息维护类
  • 内存管理类
  • 通信类

系统调用三阶段

  • 参数准备阶段
  • 系统调用阶段
  • 系统调用执行阶段

系统调用中的参数传递

  • 寄存器,效率最高

壳(shell)

API调用需要编程,于是操作系统接过工作,使其变得简单的原则,提供了一个壳(shell)来与用户交互。每个系统都提供某种壳。这个壳既可以是图形界面又可以是文本界面。用户不能直接调用操作系统服务,用C的库函数来实现这个问题。

一个壳的具体功能

  • 显示提示符,如Linux中的%
  • 接受用户命令并执行
  • 实现输入输出间接
  • 启动后台进程
  • 进行工作控制
  • 提供伪终端服务

壳做的事情很简单

  • 显示命令提示符
  • 等待用户输入命令
  • 使用fork创建子线程
  • 使用exexve在创建的子线程里执行用户输入的命令。

具体实现过程在书上。

0 0