操作系统初步认识
目录:
- 冯诺依曼体系结构
- 操作系统
- 核心功能
- 操作系统管理硬件
- 系统调用和库函数
1.冯诺依曼体系结构
为什么在学习操作系统前,要学习冯诺依曼体系结构,这是什么东西?
- 冯·诺依曼体系结构(Von Neumann Architecture)是计算机系统的经典结构模型,由约翰·冯·诺依曼在1945年提出。
- 这种体系结构是现代大多数计算机系统的基础。
简单点说,冯诺依曼体系结构决定了计算机硬件的结构。
存储程序的概念:程序和数据都存储在计算机的内存中,计算机通过读取内存中的指令逐条执行程序。这样,计算机不仅可以执行数据操作,还可以操作指令本身。
意味着现在你所用的计算机里的内存,不仅用于存放数据,还用于存放程序代码。
五大基本部件:
-
控制器:负责读取、解释和执行指令,控制计算机的操作流程。
-
运算器(算术逻辑单元,ALU):负责执行基本的算术和逻辑操作。
-
存储器:用于存储数据和指令,常包括随机存取存储器(RAM)和只读存储器(ROM)。
这里的存储器就是内存
-
输入设备:将外部数据输入到计算机中,如键盘、鼠标等。
-
输出设备:将计算结果输出到外部,如显示器、打印机等。
单一存储空间:程序和数据共享同一个存储空间。这种结构导致了所谓的“冯·诺依曼瓶颈”,即处理器的速度被存储器的访问速度所限制。
顺序执行:程序按照存储器中的顺序逐条执行指令。控制器依次读取每条指令并执行,除非遇到跳转指令。
冯诺依曼体系结构图示:
**中央处理单元(Central Processing Unit,简称CPU)**是计算机的核心部件,负责执行指令并处理数据。在冯·诺依曼体系结构中,CPU通常由两个主要部分组成:
- 控制单元(Control Unit, CU):
- 控制单元负责解释和执行指令。它从内存中提取指令,并根据这些指令控制CPU的其他部分和整个系统的操作。
- 控制单元还管理数据流,并决定如何将数据在CPU和其他部件之间传输。它协调输入、输出、内存和其他组件的交互。
- 算术逻辑单元(Arithmetic Logic Unit, ALU):
- ALU是CPU中负责执行所有算术运算(如加法、减法等)和逻辑运算(如与、或、非等)的部分。
- 当控制单元遇到需要进行计算的指令时,它将数据传送到ALU,ALU完成计算后将结果返回。
CPU的其他重要组成部分
- 寄存器(Registers):CPU中的小型高速存储单元,用于临时存储指令、数据和地址等。寄存器可以极快地存取数据,因此在执行过程中发挥了重要作用。
- 缓存(Cache):大多数现代CPU还集成了缓存,这是比主存(RAM)更快的存储器,用于存储频繁访问的数据或指令,减少CPU等待内存读取的时间。
- 时钟(Clock):CPU依赖时钟脉冲来同步指令执行和数据流。时钟速度(时钟频率)通常用GHz表示,它决定了CPU的运算速度。
从图中可以发现:
- 不考虑缓存的情况下,CPU只能对内存进行读写,不能访问外设
- 外设要输入或输出数据,只能写入内存或从内存中读取
简单来说,所有的设备只能和内存打交道。
2.操作系统
计算机由软件和硬件组成,冯诺依曼体系结构为操作系统提供了硬件基础,软件方面则是依靠操作系统来完成。
- 操作系统(Operating System, OS)是计算机系统中的核心软件,负责管理软硬件资源,并为用户和应用程序提供接口和服务。
- 操作系统在计算机中起到桥梁作用,连接用户、应用程序和硬件,确保系统能够高效、安全地运行。
本质上,操作系统也是软件,它的工作就是管理软硬件资源,类似于QQ的工作就是聊天
2.1核心功能
- 资源管理
- 处理器管理:操作系统通过调度算法(如时间片轮转、优先级调度等)分配CPU资源给不同的进程,确保多任务运行的流畅。
- 内存管理:操作系统负责分配和回收内存资源,管理物理内存和虚拟内存,以确保应用程序之间的数据隔离并防止内存溢出。
- 存储管理:操作系统管理硬盘等存储设备,负责文件系统的组织、文件的读写权限控制,以及数据的持久化存储。
- 进程管理
- 操作系统将每个运行的程序视为一个进程,并为每个进程分配独立的资源。进程管理包括进程的创建、调度、同步和终止。
- 操作系统使用进程控制块(PCB)来维护进程的状态和上下文信息,从而确保任务可以在中断后恢复。
- 文件管理
- 操作系统提供文件系统,使用户和应用程序能够在存储设备上创建、读取、写入和删除文件。文件系统还提供文件权限管理,以控制不同用户和进程的文件访问权限。
- 设备管理
- 操作系统负责管理输入输出设备(如键盘、鼠标、显示器、打印机等),并通过设备驱动程序(Device Driver)实现设备与系统的通信。
- 操作系统使用中断机制处理设备请求,使得CPU能够高效地响应设备输入输出。
计算机系统整体结构图示:
2.2操作系统管理硬件
-
操作系统不直接控制硬件
原因:如果操作系统自己来完成键盘的读取操作,那么只要你的键盘读取方式进行了改变,操作系统的内核源代码就需要进行重新编译,这对操作系统来说维护成本太高了。
-
为了方便控制硬件,在硬件的上面添加了驱动程序,通过驱动程序来驱动硬件,即驱动程序是专门为特定硬件编写的,负责直接控制设备,例如发送数据到设备、接收设备反馈等。因此可以将硬件和驱动看作是一体的。
-
操作系统管理硬件的方法:先描述再组织
-
将硬件描述出来,硬件抽象层(Hardware Abstraction Layer,HAL)是一种在操作系统和驱动之间的中间层,用于将硬件的具体实现细节封装起来,向上层提供一个统一的接口,进而方便去组织和管理硬件。
2.3系统调用和库函数
**系统调用(System Call)**是操作系统提供的一组接口,允许应用程序请求操作系统内核执行特定的低级操作,例如文件管理、内存分配、进程控制、网络通信等。
为什么会存在系统调用?
- 操作系统由较高的权限,如果直接不封装起来,操作系统内部可能就会受到破坏。
- 但是有一些软件需要操作硬件或者管理资源,那么操作系统就需要将相关的功能封装成接口,调用接口就不再有对操作系统内部破坏的可能。
虽然操作系统已经提供了系统调用的接口,但是对于用户的要求还是相当高的,继而有了二次封装,形成了库
**库函数(Library Function)**是一种由编程语言或操作系统提供的现成的函数集合,供开发者在程序中调用以实现常见的操作,而无需手动编写相关代码。这些库函数封装了许多基础功能,比如数学运算、字符串处理、输入输出、内存管理等,从而提高了代码的重用性和开发效率。
在 C 语言中,使用库函数时,需要先引入相应的头文件。例如,要使用输入输出相关的库函数,可以引入 stdio.h
头文件:
#include<stdio.h>int main()
{printf("hello world!\n"); // 使用库函数 printf 输出字符串return 0;
}
在这个例子中,printf
是一个库函数,用于将文本输出到控制台。通过引入 stdio.h
头文件,程序就可以调用 printf
函数,而无需了解其底层实现细节。
rld!\n"); // 使用库函数 printf 输出字符串
return 0;
}
在这个例子中,`printf` 是一个库函数,用于将文本输出到控制台。通过引入 `stdio.h` 头文件,程序就可以调用 `printf` 函数,而无需了解其底层实现细节。