【Linux】进程铺垫——冯诺依曼体系与操作系统概念

🔥个人主页🔥:孤寂大仙V

🌈收录专栏🌈:Linux

🌹往期回顾🌹:【Linux开发工具】版本控制器git

🔖流水不争,争的是滔滔不


一、冯诺依曼体系

冯诺依曼体系是现代计算机的基本架构。主要特点是存储程序控制,用二进制表示数据和指令,指令和数据分开存储且顺序执行。由运算器、控制器、存储器、输入设备、输出设备组成。1946 年由冯・诺依曼提出,随着第一台 "存储程序" 计算机 EDVAC 诞生奠定基础。该体系奠定现代计算机基础,推动计算机技术发展,促进计算机应用的普及。

下图为一个冯诺依曼体系的示意图:

CPU=运算器+控制器。

存储器=内存。

外设里面包含输入设备和输出设备,输入设备有键盘、鼠标、话筒、摄像头、网卡、磁盘等。输出设备有显示器、磁盘、网卡、打印机等。
不考虑缓存的情况下,CPU只能对内存的数据进行读写,不能访问外设。外设要输入或输出数据,也只能写入内存或者从内存中读取。在CPU的数据层面,只和内存打交道。外设只和内存打交道。

内存是在计算机运行程序时,程序代码和相关数据会被加载到内存中,CPU 可以快速地从内存的不同位置读取和写入数据,这就好比是一个高速的临时工作区。内存读写速度极快而磁盘读写速度相对较慢。内存的容量较小而磁盘的容量大得多。内存的数据容易丢失而磁盘是永久存储介质

上文说过磁盘相对于内存速度是慢好多的,这里可以下一个结论离CPU越近运行速度越快且造价越高。当代计算机是性价比的产物,冯诺伊曼体系广泛运用也是因为这一优势。

二、操作系统

概念

操作系统是一种系统软件,它位于计算机硬件和用户应用程序之间。它是计算机系统中最基本、最重要的软件,就像一个 "大管家 " 一样,掌控着计算机系统的各个方面。管理是操作系统的核心

主要功能

  1. 资源管理
    对硬件资源包括 CPU、内存、存储设备和输入 / 输出设备等进行合理分配和调度。例如,当多个程序同时运行时,操作系统会决定哪个程序使用 CPU 以及使用多长时间,如何分配内存空间给不同的程序等。
  2. 程序运行支持
    为应用程序提供运行环境。比如,它会加载应用程序到内存中,并且提供程序运行时所需要的系统调用接口。像软件需要读取文件或者在屏幕上显示内容,都要通过操作系统提供的接口来实现。
  3. 文件管理
    提供文件系统来存储、组织和检索文件。我们在计算机上看到的文件夹和文件的分类存储、文件的命名、复制、移动等操作,都是操作系统文件管理功能的体现。常见的文件系统有 Windows 系统中的 NTFS 和 Linux 系统中的 ext4 等。
  4. 用户界面提供
    提供用户与计算机交互的界面。有命令行界面(如 Linux 系统中的终端命令)和图形用户界面(如 Windows 系统的桌面环境)两种主要类型。图形用户界面通过窗口、菜单、图标等方式,让用户能够方便地使用计算机。

    内核(进程管理,内存管理,文件管理,驱动管理)

操作系统是一款进行软硬件管理的软件。

设计OS的目的

对下,与硬件交互,管理所有的软硬件资源

对上,为用户程序(应用程序)提供⼀个良好的执行环境

上图为软硬件体系结构层状结构。访问操作系统时必须进行系统调用(系统调用其实就是函数由系统提供的)。

我们的程序只要判断出访问了硬件,那么它必须贯穿整个软硬件体系结构。例如我们用printf打印了数据在屏幕上,那么访问显示屏是外设也就是硬件,就需要进行调用系统接口访问操作系统访问硬件,这时候调用printf的c语言库,那么库底层封装了系统调用。

操作系统的核心功能

在整个计算机软硬件架构中,操作系统的定位是:一款纯正搞管理的软件。

对操作系统的管理举一个例子。管理者为校长,被管理者为学生。执行的人为辅导员。

校长要想得到学生的信息不用亲自下去一个一个的从学生口中得到学生的信息,只需要让辅导员从学生那里得到学生的数据,然后用excel表格对学生信息进行管理。升级版用结构体把学生的所有信息先描述起来。统一进行管理。

通过结构体对学生信息进行描述,然后把所有信息用链表存储起来。这样可以实现对学生信息的增删查改并且更加高效。先描述在组织。

所以校长管理的对象不是人,是数据。管理者管理被管理者实际上就是对数据结构的管理。


通过上述例子,在操作系统内部对底层的硬件的各种属性,通过类把各种属性进行描述,然后形成数据结构组织起来进行管理。

计算机管理硬件

  1. 描述起来,用struct结构体
  2. 组织起来,用链表或其他高效的数据结构

先描述,在组织

三、系统调用与库函数的概念

在开发角度,操作系统对外会表现为⼀个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行⼆次开发。比方说,用printf在显示屏上打印数据,通过c语言的库(库里面封装了系统提供的接口)进行调用。

库函数和系统调用属于上下层的关系。

相关推荐
智能运维指南10 分钟前
国产DevOps平台技术架构与实践解析——基于信创场景的适配与落地
运维·架构·devops·devops平台·研发效能平台
Hi2024021711 分钟前
如何在Docker容器里“克隆自己”
运维·docker·容器
serve the people12 分钟前
IP 信用(IP Reputation/IP Credit)全解:定义、评分与实战应用
运维·网络·tcp/ip
不怕犯错,就怕不做15 分钟前
RK3562+RK817在关机状态下提升充电电流至2A解决方案
linux·驱动开发·嵌入式硬件
0思必得015 分钟前
[Web自动化] 爬虫URL去重
运维·爬虫·python·selenium·自动化
jdyzzy36 分钟前
2小时,我搭建了一套可追踪的任务管理流程
运维·devops·项目统计表
我和我导针锋相队36 分钟前
在撰写项目书时,如何在有限的篇幅里平衡呈现“问题链”“合作证据链”和“创新落地计划”,避免内容冗余又能清晰传递核心信息?
大数据·运维·人工智能
白云千载尽38 分钟前
ssh远程连接之后的scp命令工具来操作文件
运维·服务器·ssh
m0_5649149243 分钟前
Altium Designer,AD如何修改原理图右下角图纸标题栏?如何自定义标题栏?自定义原理图模版的使用方法
java·服务器·前端
想进部的张同学1 小时前
RK3588开发板安装GStreamer硬件加速插件完整指南 成功版本(docker)
运维·docker·容器·rkmpp