文章目录
前言
本此将讲述一些对进程了解的一些铺垫性知识,和一些与进程有关的概念。
冯诺依曼体系结构
我们常见的笔记本,台式计算机,服务器等大部分都是遵循冯诺依曼体系结构实现的机器。
冯诺依曼结构如下图:
(图片来自网络)
我们的冯诺依曼由输入设备、输出设备、存储器、运算器、控制器组成。下面分别介绍一下这些都是什么
输入设备:键盘,鼠标,写字板,磁盘,网卡
输出设备:显示器,音响,网卡,显卡,磁盘
存储器:就是内存(通俗的讲)
运算器+控制器[CPU]:算数计算+逻辑计算
而且冯诺依曼体系必须遵循的是:
我们的输入设备,输出设备,只能从我们的内存中拿取数据在不考虑缓存的情况下我们的CPU也只能从我们的内存中读取和输出数据。
总之:所有设备都只和内存打交道。
案例:
我们在使用微信等软件聊天的时候,就是我们先在键盘输入数据到内存,内存将数据给CPU计算计算后CPU吧内存又重新给内存,内存将数据给到网卡上发出。我们接收是也是通过网卡进行接收到内存,内存给CPU计算然后显示到我们的屏幕上。
那我们为啥不直接将内存步骤省去直接输入输出对接我们的CPU呢?
因为慢。
我们的输入输出设备的速度是远远跟不上我们的CPU的。
所以我们就先将我们的数据先存储在我们的内存中,且部分数据会预装载到我们内存中(内存现在一般为8G左右),然后CPU从内存里拿东西,但是CPU计算的快的很,我们的输出设备跟不上咋办,那就让CPU把数据放到内存,我们的输出设备就可以慢慢的从内存里拿了。
那我们为啥不升级输入输出设备呢?
因为贵。hhhh
所以冯诺依曼的体系可以说一比较经济且好使的了。这也是为什么他是我们计算机通用的体系。
操作系统
我们电脑一般都是预装的Windows系统。当然也有Linux系统,还有最近我国整的openKylin系统(注:好像是开源的,大家可以了解一下)
那么我们的操作系统的作用是什么呢?为啥电脑里都要有个操作系统呢?
答:管理电脑的。
没错我们的操作系统的作用就是可以简单的理解成一个管理电脑的软件。
概念
任何一个计算机系统都包含一个基本的程序集合,被称为操作系统(OS)。笼统的理解下操作系统一个包括内核
其他程序
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(函数库,shell程序等等)
设计OS的目的
- 与硬件交互,管理所有的软硬件资源
- 为用户程序(应用程序)提供一个良好的执行环境。
那么什么是管理呢?
根据我们的理解,管理应该不是对一个人进行的工作,而是对一类人。
及 管理不是对被管理对象进行直接管理,而是只要拿到被管理对象的所有的相关数据,我们对数据的管理,就可以体现对人的管理。
那我们的操作系统又是如何对如此巨大的数据进行管理的呢?
其实我们知道的是大部分的数据都是重复且正常的我们只需要对少量的异常数据进行管理即可。
所以我们就应该使用某种技术将我们需要管理的对象描述出来。
因为操作系统是C语言写的,所以我们需要用struct
当我们需要的对象进行描述好,然后使用某种数据结构来将我们的对象一个个的链接起来。(如双链表…….)
及我们应该做到先描述再组织。
系统调用和库函数概念
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就和有利于更上层或者开发者进行二次开发。
我们使用的电脑的结构应该是如下图的,而我们在使用库函数时是调用了lib部分的内容,而lib就需要去系统调用接口的内容实现自己的lib。
及如果出现了一个新的操作系统时,我们的C,Java,C++…语言是需要自己实现lib来适配操作系统的。这也是为什么我们操作系统出现新操作系统出现比较困难的原因。
我们的操作系统对硬件或者旭东的管理都是为了服务我们的用户,如当我们使用C语言的printf函数时,我们并没有直接让硬件(显示器)打印数据,而是通过各种层然后经过操作系统的管理下才得到了打印数据的行为。而printf后发生的一切都是操作系统的工作,我们就无需过分消耗精力关心了。
进程
我们先在linux中跑一个进程。
进程代码如下:
#include<stdio.h>