目录
一.冯诺依曼体系结构
存储分级
为什么程序运行之前,必须加载到内存上?
二.操作系统
操作系统是什么?
为什么需要操作系统?
操作系统是如何管理软硬件资源?
一.冯诺依曼体系结构
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成
输入单元 :包括键盘 , 鼠标,usb,磁盘/ssd,网卡存储器 :存储器起始就是 内存 !中央处理器(CPU) :含有运算器和控制器等输出单元 :显示器,打印机,网卡,显卡等
内存与磁盘的区别:
内存和磁盘是计算机中的主要存储部件
内存是利用电效益实现的
一旦电脑断电,内存存储的数据会全部丢失
磁盘(永久存储介质)是外设,可以永久存储数据。
内存的特点:处理数据速度非常快,造价高
磁盘的特点:相对于内存处理数据的速度较慢,造假低
注:计算机中几乎所有设备都有存储数据的功能,只是存储能力有大有小。
处理数据的速度:CPU>内存>各种外设(磁盘)
存储分级
从图中我们可以看出:
以cpu为中心,距离CPU越近,存储效率越高,造价越高。距离CPU越远,存储效率越低。造价越低
为什么采用存储分级?
如果全部都采用高价的存储介质,速度快但太贵,
如果全部采用低价的存储介质,便宜但速度太慢
因此,为了使造价相对较低,速度较快,采用了内存分级:
在数据层面上CPU一般不和外设直接交互(防止出现木桶效应,导致整机效率太低),CPU优先与内存进行数据交换,再进行处理。因此再在硬件上内存也可以看出成一个巨大的缓存。
因此基于冯诺依曼体系结构的计算机,本质:就是用比较少的钱,造出效率不差的计算机(性价比较高)
为什么程序运行之前,必须加载到内存上?
程序=代码+数据,最终都要CPU来执行,要想处理这些,CPU要先读取这些代码和数据,CPU和内存有“数据(二进制层面)”层面的交互,形成一个exe的可执行文件,而文件只能存储在磁盘(外设)中保存。而现代计算机大多数都是采用的冯诺依曼结构,CPU与内存进行数据交互,因此需先把exe文件(要执行的程序)里的东西,加载到内存上,才可以运行。
二.操作系统
操作系统是什么?
是一款软件,进行软硬件资源管理的软件。
是计算机开机后,第一个加载的软件
为什么需要操作系统?
我们知道,世界上第一台计算机埃尼阿克,他是没有操作系统的,他需要专业的人员手动的进行各种操作且很容易出错,同时具有的功能也很少。因此为了方便使用人员,大佬们专门写了一块软件来进行,让我们可以通过一些简单的指令或动作,告诉操作系统,让它代替我们对硬件进行一系列的操作。
简单来说:
操作系统可以代替我们对软硬件进行资源管理(手段),给用户提供良好(易用,稳定,安全,高效)的使用环境(目的)
操作系统是如何管理软硬件资源?
计算机的层状结构:
举一个例子(校园管理)
在你来到入学时,记录你各种信息的档案会到学校里,然后你在学校这四年的学习与其他情况都会记录在你的档案里,在这期间,学校会根据你的档案里记录的信息对你进行管理,为了方便管理,可以定义一个student结构体记录信息
struct student
{
int age;
int grade;
string name;
....
}
为了方便保存,查找等,学校将student以链表的方式链接在一起
struct student
{
struct student* next;
int age;
int grade;
string name;
....
}
从此学校对于学生的管理就变成了对结构体链表的管理,我们可以通过访问结构体的信息,来对链表进行增删查改(对学生进行扩招,开除)。
管理的本质不是管人,而是管理数据。
对学生的管理,就是我们计算机管理的建模过程。
我们可以总结对事务的管理:
先描述,再组织
操作系统管理核心有:
1.进程管理
2.内存管理
3.文件/IO管理
4.驱动管理
这些管理都遵循:先描述,再组织。
再看计算机的层状结构
对于下三层,我们知道操作系统通过先描述,再组织,将底层的硬件管理好。我们知道,操作系统给用户提供了良好的使用环境,那么用户是谁呢,又如何提供良好的环境呢?
广义上:用户包括所有使用计算机的人,
狭义上:用户是开发者(这里我们用户默认为开发者)。
在技术层面上,操作系统是可以实现,用户直接使用操作系统提供的各种功能的,但是因为不能确保群众中有没有坏人,因此操作系统是不完全信任用户的,用户不能直接使用操作系统,但是操作系统由不得不为用户提供服务。
因此,为了确保安全,操作系统会把各个功能,封装成一个一个的系统调用函数,用户只能通过系统调用函数,来获取操作系统的数据,因为系统调用函数是操作系统实现的,因此用户只能获得有限的数据,有效的防止群众中的坏人进行破坏。
一般用户想访问操作系统数据或者硬件,必须通过系统调用。
由于系统调用函数使用起来比较麻烦
站在用户的角度,创造了外壳程序(shell,图形化界面),让用户使用一些简单的指令就可以调用系统调用函数。
站在开发者的角度,是可以直接调用系统接口的,但是为了一些小白考虑,将一些系统接口封装成了各种各样的函数,打包形成库,方便了所有开发者使用,不用自己去写,而是直接调用库函数,提高了开发效率,降低开发成本。
库函数于系统调用函数是什么关系?
上下层(库函数里面封装了系统调用函数)。
因此:
广义上的操作系统:包括操作系统,shell(外壳程序),语言库,系统调用
狭义的操作系统:操作系统(以为就是我们平时所说的Linux内核)