【Linux】冯诺依曼体系与操作系统

发布时间:2026/7/31 19:14:03
【Linux】冯诺依曼体系与操作系统 Linux冯诺依曼体系与操作系统1、冯诺依曼体系结构我们不常见的计算机如服务器大部分都遵守冯诺依曼体系1.1 五大硬件部件五大组成输入设备、存储器、运算器、控制器、输出设备输入设备键盘鼠标扫描仪摄像头话筒网卡磁盘等输出设备显示器打印机内置播放器网卡磁盘等注意磁盘属于外部存储设备计算机可以从磁盘中读取数据也可以把数据写入磁盘中输入、输出设备都是外部设备存储器这里的存储器指的是内存它是一种硬件级别的缓存空间中央处理器CPU由运算器和控制器共同构成CPU只能对存储器进行读写不能直接访问外设运算器负责算术运算控制器进行发送控制信号整体流程输入 → 计算 → 输出数据先输入到内存CPU 从内存拿数据做运算结果放回内存再交给输出设备展示1.2 内存CPU不能从输入设备读取数据并写入输出设备数据必须从输入设备写入存储器CPU再从存储器读取数据进行计算再把计算结果写入存储器再从存储器中刷新刷新出结果存储分级金字塔计算机中内存的读取速度是微秒级别外部设备的读取速度是毫秒级别CPU和外设之间的速度差较大如果将CPU和外设直接连接那么CPU 会疯狂等待外设CPU 大部分时间空闲由木桶效应整机效率极低核心思想局部性原理程序访问数据有局部性刚用过的数据很大概率马上还要用访问一块数据旁边的数据也很可能马上访问把即将要用的数据提前预加载到高速内存CPU 直接跟高速内存交互减少访问慢速外设所有程序想要运行必须先加载到内存C 语言编译得到二进制可执行文件放在磁盘磁盘是外设CPU 不能直接读磁盘上的程序必须拷贝进内存CPU 才能执行它程序就是数据指令和数据同等看待全都存放在存储器IO原理数据流动的本质是拷贝输入时键盘输入设备把数据拷贝到内存CPU从内存读取数据做处理如果要打印CPU处理完会把数据写回到内存内存的数据再拷贝到显示器输出设备显示出来计算机中I为Input输入、O为Output输出IO效率问题由设备的拷贝效率决定聊天时的数据流动发送方键盘中输入字符串数据拷贝进入内存CPU 处理内存的数据拷贝给网卡输出设备网卡把数据通过网络传输到对方电脑接收方网卡作为输入设备网络数据拷贝到本机内存CPU 读取内存处理内存的数据拷贝给显示器输出2、操作系统2.1 概念任何计算机系统都包含一个基本的程序集合称为操作系统(OS)。笼统的理解操作系统包括内核进程管理内存管理文件管理驱动管理其他程序例如函数库shell程序等等狭义上的操作系统是内核Kernel内核是操作系统最核心的部分包含四大功能内存管理文件管理驱动管理进程管理广义上的操作系统是内核外壳shell系统库图形界面预装软件2.2 操作系统存在的目的手段管理全部软硬件资源目的给用户提供稳定、高效、安全的使用环境计算机的层状结构操作系统的管理学校模型校长 操作系统内核决策者辅导员 驱动程序中间执行者学生 底层硬件网卡、硬盘等外设管理者和被管理者不需要见面校长不会直接管理每一个学生做出的决策交给辅导员执行同样操作系统不会直接操作硬件而是交给驱动程序由驱动程序执行管理的本质是对被管理者身上的数据做管理数据是管理者做决策的依据比如学校管理学生学生有姓名、院系、成绩、特长等属性。那么如果想统计学生的信息应利用结构体如果找出成绩最差的学生劝退此时想快速找到该学生应利用链表将结构体组织起来操作系统管理进程、管理硬件一模一样管理进程不是直接操控 CPU 硬件内存里维护进程链表修改链表就是管理进程所以管理的本质就是对信息的维护首先要定义一个结构体结构体中是硬件设备的各种属性一个结构体对象表示一个硬件然后把结构体对象采用链表或其他数据结构等形式组织起来这时操作系统对硬件设备的管理变成了对一个硬件的管理计算机管理的本质先描述结构体类把现实事物属性抽象成数据再组织数据结构链表等把大量实例组织起来注意操作系统对硬件的管理最终都会装换成数据结构所以操作系统中含有大量的数据结构2.3 系统调用接口作为用户无法直接和操作系统进行交互做执行时真正让硬件完成这件工作这件事只有操作系统内核有权限操作系统为了保证数据安全不允许用户随意改动但又要给用户提供服务所以操作系统用接口的形式给用户提供调用的入口例如银行不能让任何人触碰金库但又必须给合法普通人提供服务大堂经理 库函数接待用户柜台窗口 系统调用接口唯一合法入口员工 操作系统内核代码金库 计算机硬件资源保安 CPU 硬件权限保护内核态 / 用户态安全核心思想不信任任何人但是要给合法用户提供服务。类比操作系统用户程序普通应用运行在用户态没有权限直接操作硬件不安全禁止直接访问底层硬件如果想要操作硬件资源**必须走唯一入口系统调用接口**很多C/C库函数本质上都是对系统调用做封装举例你写程序想往硬盘写文件。你的程序不能直接操作硬盘硬件调用库函数库函数调用系统调用操作系统校验权限然后调用硬盘驱动最后硬件完成写操作总结在开发角度操作系统对外会表现为一个整体但是会暴露自己的部分接口供上层开发使用这部分由操作系统提供的接口叫做系统调用系统调用在使用上功能比较基础对用户的要求相对也比较高所以有心的开发者可以对部分系统调用进行适度封装从而形成库有了库就很有利于更上层用户或者开发者进行二次开发