操作系统概述

HumanCore - CP/M-17 Version 1.0, Date: January 08, 1996

操作系统介绍

什么是操作系统

操作系统实际是管理计算机软硬件资源的程序(CPU、内存、硬盘等);使用户和硬件之间有了一个交互层,从而屏蔽了硬件的复杂性并保证硬件使用的安全性(通过系统调用)。同时,操作系统还负责协调多任务的调度。总结一下操作系统的特性

  1. 直接访问硬件
  2. 隐藏硬件复杂性
  3. 管理软硬件
  4. 协调、隔离并保护上层应用程序

用两个词总结操作系统,就是抽象仲裁,抽象使我们可以忽视底层硬件的区别,采用相同的方式对其进行调用,而仲裁使得我们不必理会资源调用与管理的方式和时间,这些操作系统会替我们完成。

操作系统组成

我们可以按照抽象和机制和策略,对于操作系统进行分解。操作系统对所需要的功能进行抽象,采用不同的机制对抽象的模块进行控制,同时控制过程有具体的策略。

抽象

进程、线程、文件、内存管理等

机制

创建、调度、读写、重分配等

策略

最近最少使用、先入先出等

例子:内存管理

我们有一些内存页面,当有一个进程时,我们对内存进行分配,然后映射给指定的进程,这样进程就可以访问指定的内存。由于内存页面可能会满,所以我们需要一些策略对页面进行置换,例如FIFO,LRU等。

操作系统设计原则

  1. 隔离性(isolation):不同的应用相互不能影响,用户态不能影响内核态,即禁止直接的硬件访问,只能通过系统调用实现。
  2. 复用性(multiplexing):对硬件资源进行规划,分时复用;软件具有共享性,一个库可以为多个应用使用
  3. 交互性(interaction):不同应用可以通过通信手段进行交互

内核与用户态(区分边界)

为何要区分

限制不同程序间的访问能力,实际上就是进行了权限划分。

用户态

只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。

内核

内核是操作系统的核心,负责内存、硬件、文件系统以及应用程序的管理,是连接应用程序和硬件的桥梁。在内核态中,cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡等。CPU也可以将自己从一个程序切换到另一个程序。

graph TB
    node["Application"]
    node1["Kernel"]
    node21["CPU"]
    node22["Memory"]
    node23["Device"]

    node-->node1
    node1-->node21
    node1-->node22
    node1-->node23

系统调用(用户和内核态间交互)

一般的应用程序都是运行在用户态,当需要调用操作系统的系统态级别的功能时,例如文件管理、进程控制、内存管理等,都必须通过系统调用的方式向操作系统提出请求。这些系统调用可以分为:

  • 设备管理:设备请求、启动、释放等
  • 文件管理:文件创建、读写、删除等
  • 进程控制:进程创建、撤销、阻塞、唤醒及进程间通信
  • 内存管理:内存获取、回收及获得内存大小和地址等功能
系统调用过程

图片名称

常见的系统调用(API)
功能 API名称 具体功能
进程控制 fork 创建子进程
exit 退出
wait 等待
文件管理 open 创建/打开文件
read
write
close 关闭
设备操作 ioctl io控制
read
write
通信 pipe 管道
shmget

信号

除了系统调用,我们还可以通过信号的方式实现内核和用户态的交互。

操作系统架构

不同架构方式

宏操作系统

模块系统

将不同功能划分为不同模块,并提供相应接口,可以启动各种模块实现不同的功能。这个是现今最常用的操作系统架构。

优点
  • 维护性好、系统资源占用少
缺点

通过模块访问功能增加了性能开销,模块间维护可能出现困难

微内核操作系统

微内核,顾名思义,其内核只掌控很少一部分功能,其他功能都交由上层用户态的程序。一般来说,微内核需要支持进程间通信、地址空间和线程。而文件、数据库、设备等交由上层管理。

linux架构方式

linux架构可以分为三层

1 用户态

UI
标准用户程序

shell、编辑器及编译器等

系统调用接口

系统调用相关API

2 内核态

进程管理、内存管理、文件系统

3 硬件

CPU、内存、硬盘、IO设备等

操作系统挑战性

  • 操作系统一般很庞大,而且需要管理原始硬件,因此必须高效、安全、稳定
  • 操作系统会涉及大量的并发性及资源调度
  • 操作系统需要在时间、空间、性能之间进行复杂的权衡,同时还要考虑硬件细节

操作系统的演变

操作系统是随着物理硬件一起发展起来的,早期的操作系统可能规模很小,是单用户、单程序的,随着硬件的发展,操作系统经历了批处理、多程序、分时、个人计算机以及分布式计算等几个阶段。每个阶段侧重点不同

学习操作系统的一些资料

最具影响力的操作系统论文

  1. SIGOPS Hall-of-Fame Awards,到目前有三十多篇获奖论文,这些论文非常重要

操作系统学习网站

  1. 清华大学操作系统慕课网3
  2. Expanded Main Page - OSDev Wiki:一个专门介绍如何开发操作系统的网站

参考文献

0%