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

相关推荐
大模型铲屎官1 分钟前
C#入门:从变量与数据类型开始你的游戏开发之旅
开发语言·c#·游戏开发·数据类型·变量与数据类型·unity基础·c#变量
69岁老同志程序员12 分钟前
Ubuntu下管理多个GCC版本
linux·ubuntu
RyFit20 分钟前
Liunx启动kafka并解决kafka时不时挂掉的问题
linux·kafka
keep one's resolveY20 分钟前
Tomcat线程池详解,为什么SpringBoot最大支持200并发?
java·开发语言
苏墨瀚24 分钟前
Bash语言的堆
开发语言·后端·golang
程序员JerrySUN27 分钟前
实战指南:从零构建 Linux 声卡字符设备驱动——深入 ALSA 框架与内核模块开发
linux·运维·服务器
IT 小旋风33 分钟前
centos 7误删/bash 拯救方法
linux·运维·centos
鲤籽鲲39 分钟前
C# Type类中Name、FullName、Namespace、AssemblyQualifiedName的区别
开发语言·microsoft·c#·c# 知识捡漏
愚润求学43 分钟前
C++刷题(二):栈 + 队列
开发语言·c++·算法·leetcode
inwith44 分钟前
C#语法基础总结
开发语言·c#