2024-09-13 冯诺依曼体系结构 OS管理 进程

一、冯·诺依曼体系结构

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时间、内存)的实体

操作系统通过进程的属性数据来管理

cpp 复制代码
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】因为需要先把对象描述起来,再才能组织管理

相关推荐
转世成为计算机大神11 分钟前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海30 分钟前
scala String
大数据·开发语言·scala
朝九晚五ฺ30 分钟前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
qq_3273427332 分钟前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍33 分钟前
Scala的Array数组
开发语言·后端·scala
自由的dream34 分钟前
Linux的桌面
linux
心仪悦悦36 分钟前
Scala的Array(2)
开发语言·后端·scala
yqcoder1 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
xiaozhiwise1 小时前
Makefile 之 自动化变量
linux
baivfhpwxf20231 小时前
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
开发语言·c#