目录
一、冯诺依曼体系结构
(一)基本结构

- 输入单元:包括键盘, 鼠标,扫描仪, 写板等
- 中央处理器(CPU):含有运算器和控制器等
- 输出单元:显示器,打印机 等
注意:
- 这里的存储器指的是内存
- 而磁盘是一种外存,可以永久性存储数据。磁盘也属于外设的一种。外设又分为输入设备和输出设备。磁盘和网卡既是输入设备又是输出设备。
- 对于中央处理器,它有自己的指令集,外部程序翻译为CPU的指令集,让CPU根据这些指令集去执行。
- 为了保证读取和写入速度,CPU只和内存打交道(不能访问外设(输入或输出设备))。
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
(二)举例
- 刚开始我在键盘上输入消息,键盘会先将消息加载到内存,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理,传送到朋友的电脑上。
- 之后朋友的电脑的网卡从网络当中获取到我所发的消息后,再将消息加载到内存当中,CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后朋友的显示器从内存当中获取消息并显示在电脑上

二、操作系统
(一)概念
- 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理);其他程序(例如函数库,shell程序等等)
(二)设计OS的目的
-
与硬件交互,管理所有的软硬件资源
-
为用户程序(应用程序)提供一个良好的执行环境
(三)定位
- 在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件
(四)内存管理、驱动管理、进程管理和文件管理
1. 内存管理
-
定义:内存管理是指操作系统如何有效地管理计算机的内存资源,以便为正在运行的程序提供足够的内存空间。
-
功能:内存管理负责将物理内存划分成若干块,并跟踪哪些部分正在被使用。它还负责在不同程序之间分配和回收内存,以避免冲突和资源浪费。
2. 驱动管理
-
定义:驱动程序是操作系统中的软件模块,用于控制和管理硬件设备。
-
功能:驱动管理模块负责加载、卸载和协调硬件设备的驱动程序。这样,操作系统可以与各种硬件设备(如显示器、键盘、鼠标、磁盘驱动器等)进行通信。
3. 进程管理
-
定义:进程是计算机系统中正在运行的程序的实例。进程管理是指操作系统如何有效地管理和调度这些进程以保证系统的高效运行。
-
功能:进程管理负责分配资源(如CPU时间、内存空间等)给不同的进程,并确保它们按照合适的优先级顺序执行。此外,它还负责处理进程间的通信和同步。
4. 文件管理
-
定义:文件管理是指操作系统如何组织、存储和管理文件和目录的数据结构。
-
功能:文件管理模块负责创建、删除、复制、移动和重命名文件,同时也负责对文件进行读取和写入操作。它还管理文件系统的整体结构,包括目录树和元数据信息。
三、整体结构

1. 操作系统——驱动程序——底层硬件
- (1)操作系统不直接和底层硬件打交道,操作系统对底层硬件做管理,只需要对底层硬件的数据做管理,操作系统通过驱动程序获取底层各种设备的数据。
- 举例,当您在计算机上插入一个新的硬件设备(比如打印机或者鼠标),操作系统会检测到这个设备的存在,然后通过相应的驱动程序与该设备进行通信。这使得应用程序可以通过操作系统的接口与设备交互,而无需了解底层硬件的细节。
- (2)但是,设备的数据杂七杂八的,为了对硬件的数据做管理,会使用数据结构(如
struct结构体)来描述底层硬件的信息。例如,对于一个硬盘驱动程序,操作系统可能会定义一个结构体来描述硬盘的基本信息,比如容量、扇区大小、连接接口等等。这个结构体可以包括类似如下的成员:
struct DiskInfo {
int capacity; // 硬盘容量(以字节为单位)
int sectorSize; // 扇区大小(以字节为单位)
char interface[20]; // 连接接口(如SATA, USB)
// 其他硬盘相关信息...
};
- (3)操作系统将每种设备信息形成链表
// 设备信息结构体
struct DeviceInfo {
char name[50];
int type;
// 其他设备信息...
struct DeviceInfo* next; // 指向下一个设备信息的指针
};
// 创建设备信息链表
struct DeviceInfo* head = NULL;
// 添加设备信息到链表
void addDeviceInfo(char name[], int type) {
struct DeviceInfo* newDevice = (struct DeviceInfo*)malloc(sizeof(struct DeviceInfo));
strcpy(newDevice->name, name);
newDevice->type = type;
newDevice->next = head;
head = newDevice;
}
// 遍历设备信息链表
void traverseDeviceInfo() {
struct DeviceInfo* current = head;
while (current != NULL) {
// 处理当前设备信息
printf("Device Name: %s, Type: %d\n", current->name, current->type);
current = current->next;
}
}
2. system call——操作系统
- 系统调用:可以被看作是操作系统向用户程序提供的一组函数接口。用户只能调到操作系统提供的函数来获取操作系统内部的数据。防止恶意程序对系统进行破坏。
- 操作系统为了保护自己和确保稳定性,通常不允许用户对系统内部的直接访问。用户要想获取操作系统内的软硬件信息,只能调用操作系统提供的函数。系统调用就是操作系统提供的接口。
3. 用户——用户操作接口

但这些系统调用接口对普通用户来说使用过于麻烦,因为要使用系统调用前提条件是对系统有了解。所以在系统调用接口之上又构建出了一批库(如libc、libc++等)。这些库封装了底层的系统调用,提供了更为友好的接口和函数,使得开发者无需直接与系统调用交互,而是可以使用更高级的函数来完成各种任务。比如,使用标准C库的printf函数来输出信息,或者使用scanf函数来接收用户输入。