任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。
其核心功能如图片所示,包括:
如图所示,操作系统与硬件直接交互,管理所有软硬件资源。它可以屏蔽底层硬件的复杂性,为应用程序提供统一的接口。例如:
操作系统为用户程序提供执行环境,包括:
图片中通过银行窗口的比喻形象地说明了这一点:
理解:
例子:
理解:
例子:
read()
请求操作系统打开文件、读取内容。关键点:
理解:
例子:
关键点:
理解:
例子:
printf()
函数用于输出内容到终端,它底层调用了操作系统的 write()
系统调用来完成实际的输出。fopen()
封装了文件操作的系统调用,使开发者可以更简单地处理文件。关键点:
这四个要点说明了操作系统作为用户程序与硬件之间的桥梁,如何通过分层结构和接口设计实现资源管理和安全性:
这种机制体现了操作系统设计的核心思想——通过抽象和封装,隐藏复杂性,提供易用性,同时确保安全性和稳定性。
管理。
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件。 (决策,执行)
一个学校的校长(管理者)不需要直接与每个学生(被管理者)接触,就可以管理整个学校。这是因为校长可以通过辅导员或者班主任提供的学生数据(如成绩、出勤率等)来完成管理。
管理者(如操作系统)和被管理者(如进程、内存、文件等)之间的交互并不需要直接接触。它们通过数据(描述信息)来完成管理,而不是通过面对面或者直接交互。换句话说,操作系统不需要直接干预具体的硬件或程序,只需要维护这些被管理对象的状态和描述信息,然后根据需要进行操作。
数据是管理的核心。操作系统不直接操作资源本身,而是通过对资源数据的读取和操作来实现管理。
管理的核心是数据,管理者通过记录和操作被管理者的相关数据实现对其的控制。在操作系统中,这些数据通常存储在内核中,描述了被管理资源的状态和属性。
在学校中,校长通过辅导员获取学生的信息,而不需要直接接触每个学生。辅导员就像操作系统中的“中间层”,负责收集数据并提供给校长。
操作系统作为“中间层”负责采集和维护资源数据,通过这些数据为用户程序提供服务。被管理者(如硬件设备、程序)本身并不会直接暴露其内部信息,而是通过操作系统的中间层将这些数据呈现给管理者。
将上文所述例子进行延伸,如果学生的数量过多则会造成管理的不便,所以就会使用数据结构将学生的信息进行存储,用结构体将一个学生的信息进行存储,然后将所有结构体进行联系。
同样,操作系统对管理的进程、内存、文件等就可以将他们的状态和描述信息进行存储在结构体中,然后使用合适的数据结构进行管理,进行增删查改。
操作系统要向上提供服务。 但是操作系统不信任任何用户,所以会有系统调用的概念。
操作系统对外暴露的接口称为系统调用,是用户程序与操作系统交互的桥梁。
通过接口可以降低操作系统和用户之间的耦合度,不同的服务对应不同的接口,提高安全性。
例如:
只要库函数最终使用了硬件,则该库函数一定使用了系统调用。
系统调用直接提供基础功能,但对于用户来说,使用这些功能可能过于复杂。因此,开发者会基于系统调用开发封装好的库函数。
比如软件的使用中我们只需要点击对应的按键,即可执行程序员已经封装好的系统调用。程序员用已经把系统调用封装好的库函数再次进行封装成接口,提供给用户使用,这就是对上进行服务。
例如:
printf()
是基于 I/O 系统调用封装的函数;libc
)对操作系统的功能进行了更高层次的抽象。描述和组织。
比如,大部分高级语言都可以面向对象编程,以及有类似于STL库的使用。面向对象,将事物用结构体进行封装的过程实际上就是描述,用STL库使用数据结构将结构体进行管理就是将描述后的内容进行组织。
这种管理方式贯穿于操作系统的各个模块,是操作系统高效运行的核心思想。
操作系统的核心价值体现在:
操作系统的管理方法(描述 + 组织)也贯穿其设计理念:
通过以上详细的讲解,我们可以更好地理解操作系统在计算机系统中的定位:它既是硬件资源的管理者,又是用户与硬件交互的桥梁。无论是进程管理、内存管理还是文件管理,操作系统的设计哲学始终围绕“管理”展开。