简单理解操作系统
正文开始@Assassin
目录:
1. 操作系统定位:
1.1 操作系统概览:
操作系统(英文:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
操作系统的类型非常多样,不同机器安装的操作系统可从简单到复杂,可从移动电话的嵌入式系统到超级电脑的大型操作系统。许多操作系统制造者对它涵盖范畴的定义也不尽一致,例如有些操作系统集成了图形用户界面,而有些仅使用命令行界面,将图形用户界面视为一种非必要的应用程序。
操作系统理论在计算机科学中,为历史悠久而又活跃的分支;而操作系统的设计与实现则是软件工业的基础与内核。
from:wikipedia–operating system
简单总结:操作系统是一款用于软硬件管理的软件,理解操作系统的核心要点在于理解管理。
ps:常见的操作系统有windows,linux,macos,android,harmonyos等,本篇博客重点介绍linux操作系统。
1.2 linux操作系统基本架构:
1.3 操作系统提供的功能:
操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。以现代标准而言,一个标准PC的操作系统应该提供以下的功能:
- 进程管理(Processing management)
- 内存管理(Memory management)
- 文件系统(File system)
- 网络通信(Networking)
- 安全机制(Security)
- 用户界面(User interface)
- 驱动程序(Device drivers)
- 中断(Interrupts)
- 输入/输出(I/O)
其中最主要的有四个功能,分别是:进程管理,内存管理,驱动管理,文件管理。
1.4 操作系统内核(kernel):
在硬件和设备驱动程序的帮助下,内核提供了对所有计算机硬件设备的最基本控制级别。它管理 RAM 中程序的内存访问,确定哪些程序可以访问哪些硬件资源,设置或重置 CPU 的运行状态以始终优化运行,并组织数据以进行长期非易失性存储与磁盘、磁带、闪存等介质上的文件系统。
1.5 操作模式:
现代计算机支持多种操作模式。具有这种能力的 CPU 至少提供两种模式:用户模式和内核模式。一般来说,内核模式操作允许不受限制地访问所有机器资源,包括所有 MPU 指令。用户模式操作对指令的使用设置了限制,通常不允许直接访问机器资源。CPU 也可能具有与用户模式类似的其他模式,例如虚拟模式用以模拟较旧的处理器类型,如 32 位处理器上的 16 位处理器,或64位处理器上的 32 位处理器。
1.6 设计操作系统的目的:
- 与软硬件进行交互,管理所有的软硬件资源
- 为用户程序(应用程序)提供一个良好的执行环境
2. linux操作系统体系结构:
最底层是肉眼可见的计算机实物,也就是计算机底层的硬件。这些硬件看似是一个个罗列出来的,但实际在底层都遵守冯诺依曼的组织形式。
单就只有这些硬件是不够为用户提供服务的,其上层还需有一个特定的软件来对这些硬件进行管理。例如,管理内存何时从输入设备读取数据;读取多少数据;内存何时刷新缓冲区到输出设备;是按行缓冲还是全缓冲亦或是无缓冲;这些都是由软件进行管理的,这个搞管理的软件叫做操作系统。
操作系统主要进行以下四项管理:
- 内存管理:内存分配、内存共享、内存保护以及内存扩张等
- 驱动管理:对计算机设备驱动驱动程序的分类、更新、删除等操作
- 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等
- 进程管理:其工作主要是进程的调度。管理进程、线程,决定哪个进程、线程使用 CPU,也就是进程调度的能力
然而操作系统不与底层硬件之间打交道,举个例子,如果操作系统自己来完成键盘的读取操作,那么只要键盘读取方式进行了改变,那么操作系统的内核源代码就需要进行重新编译,这对操作系统来说维护成本太高了。
因此操作系统的设计者们在操作系统与底层硬件之间增加了一层驱动层,驱动层的主要工作就是单独去控制底层硬件的。例如,键盘有键盘驱动,网卡有网卡驱动,硬盘有硬盘驱动,磁盘有磁盘驱动,声卡有声卡驱动。驱动也是一种特殊的软件,其作用简单来说就是去访问某个硬件,访问这个硬件的读,写以及硬件当前的状态等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的(例如网卡)。
此时操作系统就只需关心何时读取数据,而不用关心数据是如何读取的了,也就是完成了操作系统与硬件之间的解耦。
ps:软件工程中有一个术语叫做 " 高内聚低耦合 "。耦合就是程序中的一部分跟其他部分之间的关系。解耦合就是把必要的耦合理顺,同时尽量减少不必要的耦合。
操作系统的上层就是我们用户所处的位置,在这个层面上用户可以用命令行或是图形化界面进行各种操作,例如指令操作,开发操作及管理操作。这一层被称为用户层。
不过操作系统为了保证自身的安全,只会对外暴露一些接口,用户可以通过这些接口间接与操作系统进行交互,而不会让用户直接访问操作系统,这一系列接口被称为系统调用接口。
但这些系统调用接口对普通用户来说使用成本又太高了,因为要使用系统调用前提条件是对系统有一定了解。为了解决操作上的不便,在系统调用接口之上又构建出了一批库,例如libc和libc++。实际上在语言级别上使用的各种库,就是封装了系统调用接口的,用户就是通过调用这些库当中的各种函数(例如printf和scanf)进行各种程序的编写。
到这里应该对操作系统之上之下有了一个大概清晰的认识。
3. 操作系统的管理:
3.1 管理的方式:
操作系统位于软件和硬件的中间层次,它就像一个管家,负责管理协调硬件,软件等计算机资源的工作。从上往下看,它主要作为系统资源的管理者,为上层用户,应用程序提供简单易用的服务。从下往上看,它是最接近硬件的系统软件。
所以操作系统是一个搞软硬件管理的软件,所以管理二字是其中的精髓。通过前面的一步步推导,能够大概知道操作系统是软硬件资源的管理者,但不是直接进行管理,对于底层硬件资源,操作系统通过驱动层对其进行管理;对于上层应用,操作系统向外暴露各种接口以对其提供简单易用的服务。
这个时候来理解管理,所谓管理,并不是一定要亲自地,手把手地控制,真正的管理者是需要有决策权,这个时候就要区分决策与执行。
以学校为例,底层硬件和部分软件可以类比为被管理者—学生;操作系统可以类比成管理者—校领导层;驱动层/接口可以类比为辅导员,宿管阿姨之类的角色。
一般来说,学生们在学校是见不到校长的,那校长怎么对学生进行管理呢?校长给出管理的决策,决策下发到辅导员手中,让辅导员来亲自执行指令管理学生。这是操作系统搞管理的基本概念。
3.2 管理的精髓:
管理的精髓可以总结为—" 先描述,再组织 "。先将被管理者的信息与数据描述成一个易于管理的模型,再将各个被管理者的模型组织起来,形成一个整体。linux进程中有task_struct
的概念,该模型也就是一个结构体,结构体中包括进程的标识符,状态,优先级,程序计数器,内存指针,上下文数据等信息,这就是描述的经典例子,进程地址空间/虚拟地址空间的mm_struct
同样也是这样,将虚拟地址空间各分段的信息用指针的方式描述出来。
所以描述一个被管理者的数据信息也可以用一个合适的模型(例如结构体)囊括起来,当被管理者的描述信息足够多的时候,就需要对其进行组织,可以用合适的数据结构(例如双向链表)的形式将描述信息组织起来,之后新增或者删除信息就可以直接在双向链表中进行操作。
总结: 管理者管理被管理者,实际上是先将被管理者的各种信息进行描述,然后再将多个被管理者的描述信息根据某种数据结构组织起来,最后管理者管理被管理者实际上就是对数据结构的管理。
over~