【Linux】深刻理解OS管理
5.深刻理解OS管理
文章目录
- 5.深刻理解OS管理
- 一、冯诺依曼体系结构
- 二、操作系统OS
- 简介
- 对管理的理解——顶层理解
- 系统调用以及库函数
- 三、操作系统设计目标:以人为本与安全性
- 四、操作系统的核心模块
- 进程管理(Process/Task Management)
- 内存管理(Memory Management)
- 文件系统管理(File Management)
- 设备管理(Driver/Device Management)
一、冯诺依曼体系结构
从图中我们可以获取以下信息:
- 控制器不直接与数据进行交互,任何程序,运行的时候,都必须先被(从磁盘)加载到内存
- 存储器指的是内存,磁盘属于输入输出设备
- 不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)
- 当数据在计算机内部流转的时候,本质是在不同的设备间进行拷贝。设备的拷贝效率本质就是计算机的效率
二、操作系统OS
简介
OS其实是一款用于软硬件资源管理的软件。主要包含两个方面:其一是内核(包含进程管理、文件管理、内存管理、驱动管理),其二是其他程序(包括函数库以及shell程序)
我们可以用下面的图来理解操作系统的内部结构:
操作系统在整个计算机体系中扮演着什么样的角色我们可以看一下下面这张图
硬件层:CPU、内存、硬盘、显卡、网卡等物理设备。
设备驱动层:为每种硬件提供驱动程序,充当硬件与操作系统之间的桥梁(类似辅导员角色收集硬件状态并传递给操作系统)。
内核层:操作系统内核负责进程调度、内存管理、文件系统管理、设备管理等核心功能(相当于校长角色决策并管理所有资源)。
系统调用层:内核向用户程序提供系统调用接口,相当于给外部提供的小窗口。
用户层:各种应用程序和系统工具运行在用户空间,通过系统调用与内核交互。
-
上述结构可以类比一个学校管理系统:校长-辅导员-学生模型。校长(操作系统内核)不直接接触每个学生(硬件资源),而是依靠辅导员(驱动程序)收集学生的各种数据(硬件状态)并汇报给校长。校长基于数据做出决策(如调度进程或分配资源),再通过辅导员来执行这些决策。这种分层管理使操作系统既能保证硬件资源的统一管理与安全,又能为用户提供方便的服务接口。
-
底层硬件遵循冯诺依曼结构
-
我们的操作系统并不是直接访问硬件设备,而是通过硬件的驱动程序来进行访问,每一种硬件都有自己对应的驱动程序,这就是为什么有时候我们在电脑上插上一个新设备的时候可能会弹出驱动程序的安装
-
操作系统的作用:对下,与硬件交互,管理所有的软硬件资源;对上,为用户程序(应⽤程序)提供⼀个良好的执⾏环境
操作系统的设计目的是面向用户,为用户提供一个稳定、高效、安全的计算环境。换句话说,操作系统是计算机系统的管家:它帮助用户管理硬件、屏蔽细节,使得用户无需了解复杂的硬件细节就能方便地使用计算机。一个生动的比喻是:操作系统就像豪宅中的管家,用户是主人。主人只需告诉管家自己的需求(比如“我饿了,想吃番茄炒蛋”),管家就负责安排准备食物;同理,用户通过输入指令或操作向操作系统提出需求,操作系统就负责完成对应的操作。此比喻强调了操作系统对上要为用户提供服务、对下要管理资源的双重角色。
对管理的理解——顶层理解
对于计算机来说,管理的思路都是==“先描述, 再组织”==。
即对于任何系统,进行管理前需先描述被管理对象。在C语言中,描述对象通常使用结构体。因此,所谓的“先描述”即使用结构体进行描述,并将所有被管理对象使用某种数据结构在操作系统内部进行管理。
这样就可以完成计算机层面上对任何被管理对象的建模过程。这个过程是任何计算机对象管理都需遵守的原则。
任何计算机对象的管理都需遵守“先描述,再组织”的原则。底层硬件最终由其对应的属性集构建成结构体对象,在操作系统内部,先描述再组织起来。组织后,操作系统对设备的管理就转化为对链表节点的操作,这其实就是你们以前学习的数据结构。
系统调用以及库函数
- 在开发⻆度,操作系统对外会表现为⼀个整体,但是会暴露⾃⼰的部分接⼝,供上层开发使⽤,这部分由操作系统提供的接⼝,叫做系统调⽤(system call)
- 系统调⽤在使⽤上,功能⽐较基础,对⽤⼾的要求相对也⽐较⾼,所以,有⼼的开发者可以对部分系统调⽤进⾏适度封装,从⽽形成库,有了库,就很有利于更上层⽤⼾或者开发者进⾏⼆次开发
三、操作系统设计目标:以人为本与安全性
操作系统的核心目标可概括为**“以人为本”(提供友好、稳定的服务环境)与安全可靠**。在满足用户需求的同时,操作系统必须保护底层资源不被随意破坏。
- 以人为本:操作系统的最终服务对象是用户,操作系统要降低使用计算机的门槛,让普通用户无需了解硬件细节也能使用。例如,普通用户无需知道内存布局、CPU 寄存器细节或磁盘块结构,就可以使用文字处理软件、浏览网页等。操作系统通过抽象和接口实现资源管理,让用户专注于任务本身。形象地说明了这一点:操作系统降低了用户使用计算机的成本。
- 安全与隔离:另一方面,操作系统必须保护自身以及底层硬件资源的安全性。外部用户程序就像银行的客户,可能有恶意行为或误操作的风险。操作系统假定“不信任任何用户”,只允许用户通过受控的接口访问资源。这与银行体系中“行长”不允许任何人随意进出金库、必须通过窗口办理业务的做法类似。操作系统不能让用户程序直接操作磁盘或内存,以防止用户越权修改数据或资源。例如,如果一个程序绕过系统调用自行写入磁盘数据块,它可能占用本没有权限的空间或破坏系统文件;操作系统必须阻止这样的行为。
- 窗口机制:为了解决开放服务与保持安全的矛盾,操作系统提供了系统调用接口(system call),类似银行设立的各类办理窗口。用户程序(外部人员)只能通过这些“窗口”提交请求,比如“存款”、“取款”类的操作,对操作系统或硬件进行访问。系统调用由操作系统内核来执行,执行过程中内核拥有完整权限,可以安全地操作硬件和系统资源。这样既保护了操作系统不被随意攻击,又能为用户提供所需服务。比如在程序中使用
printf
输出字符,本质上并不是直接向显示器硬件写入,而是发起write
系统调用,由操作系统通过驱动程序完成最终的输出。 - 数据管理:操作系统强调“管理的本质是对数据的管理”。在进程管理、内存管理、设备管理等各个方面,操作系统通过维护各种数据结构来实现管理。例如,前面所述的进程控制块(PCB)和设备链表就是操作系统将管理对象(进程、硬件设备)抽象为数据,然后通过程序操作这些数据结构来管理实际对象。正因为对数据有严格控制,操作系统才能做出正确的调度与资源分配决策。
综上所述,操作系统设计的首要目标是为用户提供一个稳定高效的运行环境,同时严格控制系统资源的访问权限,确保安全。这通过抽象层级、隔离保护以及受控接口的方式来实现。在后续章节中,我们将看到这些原则如何在具体模块(进程调度、内存分配、文件访问等)中得到体现。
四、操作系统的核心模块
在内核层面,传统操作系统的核心功能一般可以分为四大模块:进程管理(任务管理)、内存管理、文件系统管理和设备管理(驱动管理)。这些模块共同构成操作系统的内核核心,其基本任务是对下层硬件资源进行有效管理,对上层用户提供运行环境。
进程管理(Process/Task Management)
负责创建、调度、终止进程等。操作系统将正在运行的程序实例称为“进程”,进程管理模块负责控制进程的生命周期和并发执行。它要决定把哪些进程运行在 CPU 上(即调度),同时记录每个进程的状态(就绪、运行、阻塞、结束等)以及优先级等信息。每当程序运行需要输入/输出或被抢占,操作系统就会进行进程切换(context switch),把当前进程从 CPU 上取下,放入等待队列中。进程管理就像学校管理学生:学校(操作系统)对所有学生(进程)进行管理和调度,学生进入学校(进程创建)、上课(运行)、休息(阻塞)、毕业(结束)等过程,都需要学校跟踪和调配。为管理众多进程,操作系统为每个进程维护一个称为**进程控制块(PCB,Process Control Block)**的数据结构(Linux 中通常叫 task_struct
)。PCB 中保存了进程的标识符(PID)、状态、优先级、程序计数器、内存指针等信息。内核将所有进程的 PCB 链接成一张链表或其它数据结构,以便统一管理。进程管理的目标是保证多任务间资源的公平分配和协调运行,从而实现并发执行。
内存管理(Memory Management)
负责管理计算机的内存资源,为进程分配和回收内存空间。操作系统需要跟踪哪些内存已被使用、哪些空闲,并为进程分配连续或非连续的内存区域。常见机制包括分页、分段等技术(虚拟内存)。由于物理内存有限,当系统中进程过多时,操作系统会将部分进程的内存暂时换出到磁盘(换页),以腾出空间。内存管理还需要解决碎片化问题,保证程序运行流畅稳定。例如,当手机或电脑运行变慢时,用户可能会关闭一些后台程序或清理内存,这实际上是让操作系统释放被占用的内存资源,从而恢复系统性能。总之,内存管理保证每个进程在需要时能获取足够的内存,并在进程结束时回收内存,避免内存浪费或冲突。
文件系统管理(File Management)
负责对磁盘或其它存储设备上的文件进行组织和管理。操作系统将存储介质抽象成文件系统,通过目录结构和文件抽象让用户和程序方便地读写数据。操作系统需要实现文件的创建、删除、读写、权限控制等功能,并维护文件的物理位置映射。文件系统就像操作系统用来存储照片、文档等数据的仓库。例如,同学们用手机拍了一张照片,操作系统会将这张图片以文件形式保存到相应目录,这个过程涉及文件系统的读写管理。文件系统管理模块还负责挂载和管理磁盘、U 盘等外部存储设备,提供目录和路径等接口,使用户无需关心底层块设备的细节。
设备管理(Driver/Device Management)
负责管理所有外设设备,包括键盘、鼠标、显示器、网卡、打印机等。每一种硬件设备都有对应的驱动程序,操作系统通过驱动来与硬件通信file-。驱动管理模块负责识别新插入设备(如检测到鼠标插入)、加载相应驱动、并对硬件状态进行监控。它还负责处理中断和 DMA 等硬件交互,使得硬件能够正常为进程提供服务。驱动程序在系统中起到“触手”的作用:操作系统要获取或控制硬件时,就通过相应设备的驱动程序来完成,就像长出一条伸手触及硬件。
除了以上四大模块,操作系统内核还包括其他功能模块,如进程间通信、信号管理、网络通信等,这些通常归为四大模块的子功能部分。总的来说,这四大模块协同工作,为用户提供稳定、安全、便利的操作环境。操作系统对下要管理资源、保证稳定高效,对上要为用户提供服务。我们的目标是理解这些核心模块的定义、职责及彼此之间的关系。