个人主页:Lei宝啊
愿所有美好如期而遇
我们上次了解了从操作系统往下的部分:Linux进程前导知识
这一次,我们将正式开始进程以及操作系统(OS)及其以上的部分。
我们将操作系统的内存管理,进程管理,文件管理等等称为操作系统的内核。
首先,我们提出两个问题,为什么要有操作系统,操作系统是什么
1.为什么要有操作系统
根据我们的前导知识,我们明白操作系统是为了去管理软硬件资源而诞生的,因为我们不可能一只手扣着网卡,一只手扣着内存去使用电脑吧。
那么为什么要有操作系统的管理呢?一个操作系统对软硬件资源管理的好不好将决定了他是否会有人去使用,所以他是为了对用户提供一个更好的服务,以及良好的运行环境,所以才有了操作系统的管理。
什么叫做良好的运行环境?稳定,安全,高效。
稳定我们可以理解,这是由冯,诺依曼体系所决定的,那么凭什么说他安全呢?
操作系统是不允许用户直接进行访问的,因为操作系统管理着内存,文件等许多资源,里面有许多数据,像他人的密码,账户等以及许多软硬件数据,如果直接暴露给用户,将会造成不稳定和安全隐患,我们并不能保证每个用户都不会对数据做修改。
所以加了一层系统调用接口,什么是系统调用呢?说白了,也就是函数,由操作系统提供的函数,就是系统调用函数,在Linux下,这些函数大都是由C语言写的。
我们通过系统调用去访问操作系统,这样就安全许多,因为系统调用是操作系统所提供的,操作系统只相信自己写的函数,用户无法直接得到操作系统里的数据,需要通过各种系统调用获取或者修改数据,如果操作系统不允许,那么就无法做该操作。
那么又凭什么说他高效呢?
就像不是所有人都会使用电脑一样,系统调用并不是每个用户都会使用,他的各种参数如果不熟悉的话,使用起来是很难受的,所以就有人将这些系统调用封装成了lib库,各种语言都有他们的标准库,就像C标准库等,C库的设计者在设计时设计了不同平台的系统调用,在Linux和window等不同平台自己去匹配调用,而我们的printf等库函数,不管在哪个平台使用,都不需要去管他的底层,因为C库设计者替我们设计好了不同系统的系统调用,这也就是为什么我们说有些语言具有跨平台性和可移植性,就是因为他的标准库设计了不同平台的系统调用。
也由此,我们能够通过操作系统去访问硬件。
举个例子:C语言的printf函数,要将数据打印到显示器上,显示器也是硬件,而printf是我们自己写的函数,操作系统是不信任他的,我们无法直接通过操作系统去访问硬件,所以他的底层就加了系统调用,这样printf就能通过操作系统去访问硬件了。
所有我们自己写的函数只要影响到硬件,或者说需要硬件(scanf,需要键盘这个硬件),那么就需要系统调用,我们无法绕过操作系统去访问硬件,而操作系统我们又无法直接访问,所以系统调用就是必须的。
以及指令等等,在linux下大部分也都是C语言写的,也是经过封装的,底层也是加了系统调用。
于是最终,我们写代码时直接使用各种库函数,在执行时也不用去管底层系统调用,或开发者,或其他用户,在进行各种操作时,不需使用比较复杂的系统调用,大大减少了用户的使用成本。
2.操作系统是什么?
操作系统是一款对软硬件做管理的软件。
操作系统的内核,我们说他包括内存管理,进程管理,文件管理等。
每一次我们开机所耗费的时间,就是操作系统在启动,只有操作系统启动了以后,我们才能更好地使用电脑。