本篇博客讲开始进入进程模块,我们先从冯诺依曼的体系结构和操作系统讲起,由浅入深,先梳理一个Linux相关知识体系框架~
身为一个程序员,我们必须要了解冯诺依曼体系结构,比如我们常见的笔记本电脑,不常见的计算机,如云服务器等,绝大多数都遵循我们的冯诺依曼体系结构。
输入输出设备我们称之为外围设备,简称外设,外设一般都会比较慢一些,以磁盘为例,相比于我们的计算机内存,磁盘是很慢的。
我们先来看一下我们的输入设备:
输入设备顾名思义就是我们使用的将信息传递进入计算机的设备,如我们的麦克风,摄像头,键盘,网卡,磁盘…
接下来是我们的输出设备:
输出设备就是将计算机处理好的信息传递给我们用户的设备,比如我们的显示器,网卡,磁盘,声卡,音响…
在这里可能有人就会疑惑了,某个设备可以既是输入设备又是输出设备吗?
当然可以啦!我们的网卡,磁盘就同时是输入设备又是输出设备。
关于冯诺依曼,必须强调几点:
1.这里的存储器指的是内存
2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
4.一句话,所有设备都只能直接和内存打交道。
中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。
在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。
通俗点说,CPU就是计算机处理数据,运算和控制的核心,从内存中读取数据然后经过CPU处理解密之后返回给内存,在从内存向输出设备输出给我们的用户。
那么问题就来了,为什么我们还要多一个存储器(内存)呢?直接从输入设备拿数据然后给CPU处理后返回给输出设备不就好了吗?也就是如下结构:
原因是我们的CPU运算速度是非常非常快的,但是我们外设的速度相对来说会慢很多,我们根据木桶原理,外设这里速度很慢导致我们的CPU大部分时间没有事情可做,整体效率就是以外设决定,导致计算机的运算速度大幅度降低,所以我们就有了冯诺依曼体系结构里面的另一个重要的部分——存储器
我们这里的存储器指的是内存
内存(Memory) 是计算机中最重要的部件之一,它是程序与CPU进行沟通的桥梁,计算机中所有程序的运行都是在内存中进行的,因此内存对计算机的影响非常大,内存又被称为主存,其作用是存放CPU中的运算数据, 以及与硬盘等外部存储设备交换的数据。
只要计算机在运行中, CPU就会把需要运算的数据调到主存中进行运算, 当运算完成后CPU再将结果传送出来, 主存的运行也决定了计算机的稳定运行
我们的CPU掉电易失数据,但是我们的内存就不会这样,只要数据放在了内存里面,掉电也不会丢失数据。
我们的存储器(内存)就是为了提高计算机的效率,有了内存之后我们的外设就向内存写入数据和读取数据,CPU只和我们的存储器交互,不和我们的外设交互,外设也只和我们的存储器交互不和CPU交互
同时我们要知道的是我们的存储器(内存)性价比相对来说很高。
因为有了内存的存在,我们就可以对数据做预加载,CPU以后在进行数据计算的时候,根本就不需要访问外设了,而只要直接伸手向内存要就可以啦,我们计算机的效率也就大大提高了。
结论1:在数据层面,一般CPU不和外设直接沟通,而是直接和内存打交道
结论2:外设只会和内存打交道------数据层面
接下来我们理解一个问题:可执行程序是不是一个文件呢?
答案是肯定的,可执行程序是一个文件,它存储在磁盘里,向外设输出。
为什么我们的程序必须先被加载到内存中呢?
因为是由我们的冯诺依曼体系结构决定的! ./bin.exe
我们在这里要看一下在硬件层面,单机和跨主机之间数据流是如何流向的!
我们先举一个例子,我们每个人现在离不开的一个工具就是聊天软件,我们来看看整个信息是如何在体系结构中流动的。
接下来就要进入我们的重点知识,操作系统的讲解了。
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)
与硬件交互,管理所有的软硬件资源
为用户程序(应用程序)提供一个良好的执行环境
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的搞管理的软件
通俗点来讲:我们的操作系统就是进行软硬件资源管理的软件
首先我们通过一个具体的例子来帮助我们理解操作系统是如何对硬件做管理的:
上述行为就是对我们管理做建模,我们分析如下:
管理的本质:对被管理对象的数据做管理
1.管理者和被管理者其实是不需要直接接触沟通的!
2.管理者和被管理者没有直接接触怎么管理数据的呢?
辅导员(硬件驱动)
管理的本质:先描述,在组织
描述:将抽象数据具体化的过程,如结构体等
组织:将具体化的数据,如结构体通过数据结构的方式管理
总结:
计算机管理硬件
描述起来,用struct结构体
组织起来,用链表或其他高效的数据结构
我们操作系统对下通过管理好软硬件资源(手段),对上给用户提供良好(安全,稳定,高效,功能丰富等)执行环境(目的)
操作系统给我们提供非常良好的服务,并不表示OS会相信我们,反而,操作系统不相信任何人!!!
我们使用操作系统并不是直接进入操作系统内部操作,操作系统也要保证自己的安全,所以它不会让我们为所欲为。
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
Linux底层实现是C语言
本篇博客主要是进程学习的铺垫,涉及冯诺依曼体系结构,数据流的流向理解以及操作系统的理解,由浅入深,重点讲解我们的Linux是怎么管理我们的进程的,图形结合可以帮助大家更快的理解我们的进程~希望这篇博客可以帮助到大家!