输入:键盘,话筒,摄像头,磁盘,网卡…
输出:显示器,音响,磁盘,网卡,显卡…
(运算器+控制器)[CPU]:算数计算+逻辑计算
存储器:就是内存
CPU的运算速度 > 寄存器的速度 > L1~L3寄存器 > 内存 >> 外设(磁盘) >> 光盘磁带
数据角度:外设不能和CPU直接交互,而是和内存交互,CPU也是如此
内存在我们看来,就是体系结构的一个大的缓存 适配外设和CPU速度不均衡的问题!
依据木桶理论来看,计算机整体的效率不是取决于CPU,而是取决于"最短的那块木板",也就是内存。
寄存器 >> 内存 >> 磁盘(外设)
计算机能够遍布全世界,就是因为有效且便宜,而内存起到一个折中的关键作用!
我们自己写的软件,编译好之后想要运行,必须先加载到内存,这个加载的过程是根据局部性原理完成的。为什么?这是体系结构规定的!
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
几乎所有的硬件只能被动的完成某种功能,不能主动的完成某种功能,一般都是要配合软件完成的(OS+CPU)。
实际上开机就是在内存中预加载操作系统。
我们知道操作系统是一款搞管理的软件,那么管理具体值什么?怎么理解?
我们假设校长是学校的管理者,校长连学生的面都很少见,他是如何管理这么多的学生的?
管理学生要和学生打交道吗?他是怎么做到的?
管理的本质:对数据进行管理!
不是对被管理对象进行直接管理,而是只要拿到被管理对象所有的相关数据,我们对数据的管理就能体现对人的管理。
我们知道Linux内核是C语言写的。抽取所有同学的属性,描述对应的同学,c中,有没有一种数据类型,能够达到描述某种对象的功能?如此多的数据是如何管理的?
我们通过struct结构体就能描述一个学生的信息,再加两个指针就能想链表一样管理大量学生的数据,通过增删查改。
所以管理的本质是对数据做管理——>对数据的管理——>对某种数据结构的管理!!
管理的核心理念:先描述,再组织
人是通过属性认知世界的!一切皆对象,一切事物都可以抽取对象的属性来达到描述对象的目的。
所以像Java、c++等面向对象的语言必定会成为编程语言的主流!
操作系统分别有4大管理模块:内存管理、进程管理(PCB: process ctrl block)、文件管理以及驱动管理。
简单理解进程是一个运行起来的程序,管理进程需要有PCB(task_struct),为什么?
我们知道对于Linux来说一切皆文件,程序也是文件,文件在磁盘中。操作系统里可能同时存在大量的进程!对进程的管理本质就是对大量进程数据进行管理。PCB就是这样一个能够管理进程数据的内核数据结构。这也符合我们先描述后组织的观念。
什么是进程?进程 = 可执行程序 + 该进程对应的内核数据结构
所以我们学习进程就是学习进程控制块中有什么属性!
类比银行系统,银行是不相信任何人的!银行给所有人提供服务的方式是通过窗口提供的。而内核是用C语言写的!接口:用C语言给我们提供的函数调用!
操作系统也是不相信任何人,要防止少数人,又要给多数人提供服务。操作系统是通过给用户提供接口的方式来进行服务的!