✨ 个人主页:在线OJ的阿川
?文章专栏:Linux入门到进阶
?代码仓库:
写在开头
现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论
目录
1. 冯.诺伊曼体系结构2. 操作系统3. 计算机层状结构4. 进程概念5.展望一下
1. 冯.诺伊曼体系结构
在计算机硬件中,大部分都遵守冯诺依曼体系结构,具体如图1所示:
存储器:内存
外设:
输入设备: 鼠标、键盘、摄像头、话筒、磁盘、网卡…输出设备: 显示器、播放器、硬件、磁盘、网卡…有的设备既是输出又是输入设备
中央处理器(即CPU):
运算器: 对我们的数据进行计算任务(算术运算,逻辑运算)控制器: 对我们的计算硬件流程进行一定的控制运算器: 处理数据
控制器: 处理代码
各个硬件单元必须用"总线"(主要为系统总线、IO总线)连接起来
通过冯诺伊曼体系结构可知道一个程序要运行,必须先加载到内存中运行才可以,这是因为输入设备和输出设备处理时间为秒,而中央处理器处理时间为微秒,差距过于明显。 如果没有存储器作为中介则计算机整体运行效率低下。而有了存储器之后,输入设备的数据会先缓存到存储器中,积累一定的量之后中央处理器开始处理,而在缓存的过程中,中央处理器可以处理其他的任务(例如检查计算机状态,释放各种各样的资源,定期刷新数据等等),恰好存储器的运行效率处于输入输出设备与中央处理器之间,相较于没有存储器而言,提高了整体计算机运行效率。
2. 操作系统
为了更好地控制硬件,而创建了操作系统
操作系统(即OS): 是一款为了给用户提供一个良好(稳定、高效、安全)的运行环境,而对硬件和软件管理的软件
操作系统包括:
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分用操作系统提供的接口叫做系统调用
但系统调用在使用上,功能比较基础,对用户的要求也比较高,所以部分有能力的开发者对部分系统调用进行适度封装,从而形成了库,有了库,就有利于更上层用户或者开发者进行二次开发,甚至一些人在操作系统之上弄出来了开发语言,供开发人员编写程序。
3. 计算机层状结构
计算机层状结构,具体如图2所示:
4. 进程概念
操作系统的管理,实际上是通过对数据的管理,从而达到对软硬件资源的管理。而对数据进行管理则都是先描述,再组织,最终可以转化成对某种数据结构的增删查改,因此操作系统中一定会存在着大量的数据结构,这也是为什么要学数据结构这本书的原因所在。
进程: 一个已经加载到内存的程序
操作系统可以同时运行多个进程,但形成真正进程时,操作系统要先创建描述进程(即进程的属性)的结构体对象【即PCB(全称process ctrl block —进程控制块】
进程(也称为task)= 内存PCB数据结构对象(即这个进程的所有属性值)+ 自己代码和数据(code&date)
大致如图3所示:
Linux当中的PCB实现:
在Linux中描述进程的结构体叫做task _struct。task_struct是Linux内核的一种数据结构,它会被装载到RAM(即内存)里并且包含着进程的信息。
task_struct内容包含着:
Linux内核中组织进程,最基本的组织进程task_struct的方式,采用双向链表组织
5.展望一下
计算机中这些可以好好看下:
操作系统(必学)
计算机网络(必学)
计算机组成
编译原理(本质:算法)
C/C++语言的最终表现形式:一套的编译器、头文件、库文件(辅助C/C++教材)
6. 夹带私货
若你能看到看到这篇文章且能看到这,则说明你我有缘,留个关注吧,后面还会接着计算机408、底层原理、开源项目、以及数据、后端研发相关、实习、笔试/面试、秋招/春招、各种竞赛相关、简历相关、考研、学术相关……,祝你我变得更强
好的,到此为止啦,祝您变得更强
7.想说的话
实不相瞒,写的每篇博客都要写五六个小时(加上自己学习和纸质笔记,共八九小时吧),很累,希望大佬支持
道阻且长 行则将至 |
---|
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 |