一、冯·诺依曼体系结构
1. 外部设备(外设):
分为输入设备和输出设备
输入设备:键盘、网卡、鼠标、网卡、磁盘(外存)、摄像头等
输出设备:显示器、磁盘、网卡、打印机等
2. 存储器
内存
3. 中央处理器(CPU)
运算器 + 控制器
CPU在数据层面,不会和外设直接互动,而只和内存进行交互
场景:(scanf / printf)→ 二进制文件 → 文件 → 磁盘 → 外设
任何程序在执行之前,都需要从磁盘上被加载到内存中,以便CPU能够访问并执行其指令
当数据在计算机间流转时,本质上是在不同的设备间进行拷贝
→ 设备的拷贝效率本质就是计算机的效率
二、操作系统(OS)
1. 一种进行 软硬件资源 管理 的 软件
内核(kernel):进程/任务/线程管理,文件系统,内存管理,驱动管理
其他程序:shell,glibc,原生库,预装软件
2. 设计OS的目的
注:每一种硬件都要有自己对应的驱动程序
手段:操作系统有效地管理底层软硬件资源,确保其稳定运行、高效利用及安全性,以此为手段保障系统正常工作
目的:操作系统为上层用户提供了一个稳定、高效且安全的运行环境,以满足用户的需求和使用体验
3. OS管理
任何计算机对象的管理思路都遵循【先描述,再组织】的原则
【Q】为什么现在所有主流的面向对象的编程语言,都要提供:1)面向对象 2)标准库?
【A】面向对象对应“先描述”,标准库对应“再组织”
【Q】程序能直接向硬件写入吗?
【A】不能,必须要通过操作系统
操作系统在设计上遵循最小权限原则,默认不信任任何用户进程,因此其核心功能被严格封装和保护,以维护系统的稳定性和安全性。
为了使上层应用程序能够利用操作系统的服务,操作系统必须暴露一系列精心设计的接口,这些接口即系统调用接口。这些接口是操作系统与用户空间应用程序之间的唯一正式交互通道,且这些接口通常以C语言的形式提供,以确保跨平台和跨编程语言的兼容性以及高效的性能。
所有软件的底层,都必须和C语言直接或间接相关!
系统调用接口是操作系统提供的一种机制,它允许上层应用程序与操作系统内核进行交互。对于一般程序员而言,直接使用系统调用接口进行开发确实存在一定难度,因为这要求开发者具备较为深厚的操作系统知识,以及对底层硬件和系统资源的深入理解。
图形化用户界面(GUI)则通常与特定的图形库或框架相关联,它为程序员提供了一套更为直观的开发工具集,使得应用程序的交互设计更加简便。
三、进程
进程管理 —— 先描述,再组织
PCB(Process Control Block):转化成对某种数据结构的管理
内核观点:担当分配系统资源(CPU时间、内存)的实体
操作系统通过进程的属性数据来管理
struct task_struct{
int pid;
int status;
int prio;
void* memptr;
上下文;
struct task_struct* next;
}
进程 = 内核数据结构(Linux下的PCB是task_struct)+ 程序的代码和数据
运行起来的程序 → 根据 task_struct 属性,进程会被OS调度器调度,运行
【Q】为什么要有PCB?
【A】因为需要先把对象描述起来,再才能组织管理