接着上面所讲,操作系统的设计目标和一些基本要求是什么?
首先讲这个设计目标,设计目标,即是我要干什么,很清晰,我要把硬件抽象为用户提供一个接口,另外一方面,我得管理好不多的硬件资源,所以设计目标就是提供服务和管理资源!
第二方面,作为一个操作系统,它应该要满足哪些原则?
可移植性,这是十分重要的,让操作系统适应更多的平台,而这方面也提出了posix标准。
安全性和公正性,安全自然不用说,你必须让用户的数据不被别人偷走,也不能轻易的崩溃,公正性的话,对于每个进程,你都必须维护好公平,不能让一个进程一直霸占导致其他进程过于饥饿!
强壮,类似安全
有效,两方面,一个是提高资源利用率,一个是提高吞吐量。
接口统一,类似可移植。
(另外,对上次的虚拟机做一个补充,虚拟机有一个广义的概念,就是操作系统,在裸机上加载一层软件,来管理整个计算机系统,形成一个虚拟的计算机,(另外的就是我们现在用的软件))
因为是复习,这里还要提一下一些操作系统的概念:
进程与作业,进程本质上是正在执行的一个程序,与每个进程相关的是进程的地址空间,你现在打开的wps可能就是一个进程(实际有很多进程),而你再打开wps又是一个新的进程,虽然东西都是一样的,但是进程是一个实例,而代码是一个模板,而作业是一个大的概念,可能需要好几个进程去做,而对于进程的地址空间,想一想,一个爸爸生了好多儿子,每个儿子是不是要有自己的房子,进程也一样,进程就是一个人,他有自己的特性,代码是它的外貌,而数据是它的精神,各种各样的特性封装在躯壳或者独立的空间里,(这里我倒想到一个有意思的东西,虚拟内存,和人一样,如果我们都把自己的所有财富都拿出来,街道肯定空间不够,所以我们只能看今天要干嘛带什么东西出门,看到人太多了只能窝在家里(对应窝在硬盘),而其实最开始不需要虚拟内存的概念,为什么,因为大家都穷的要死,要带的东西太少了,而现在大家富裕了,财富多(需要的内存越来愈大),所以我们不可能为你提供这么大的物理内存,只能看需求带东西)。
文件的一二三,我们说过,在很多操作系统里面,一切皆文件,硬件被抽象为文件,我们就像读书一样去操作硬件,文件可以定义为文件名下的一组信息的集合,这倒是很贴切,当然文件最后都要对应硬件,或是硬盘之类的,文件名相当于一个ID,我们知道它是什么东西,但是文件要对应到物理上去,还得有一个inode(也就是一个物理定位),我们为什么不直接操作物理定位,因为我们用户不想喝这些复杂的底层打交道,我们只需要拿到文件名就够了,我们只需要知道这个人叫某某,至于它住哪住的怎么样,我们并不是很想关注,所以,在实际的操作系统来讲,文件对应的两个必不可少的东西就是文件名和inode节点。
内核态和用户态以及所谓系统调用:
我们说操作系统的作用是封装硬件,用户可以干嘛,用户可以使用系统给的api(就是系统调用)去做我们想做的事情,但是具体的实现我们不知道,我们也无法直接操作硬件,我们想做什么,都得向内核请求,靠内核来实现,或者说内核态和用户态处在两个不同的级别上,一个是boss,一个是小职员,我们要干嘛最后都要靠内核来做,这些系统调用是系统给我们的接口,而为了提高代码的可移植性,unix下有一个posix标准,就是对应这些系统调用,比如fork之类的。
系统调用是操作系统很重要的一个概念,有的题目也会涉及到,事实上,系统调用是操作系统必须提供的一个功能,因为它是我们编程的接口或者说工具,没这些函数编个屁!
系统调用有很多种,涉及到了各个方面,通过这些函数,我们可以覆盖对硬件的访问和管理,当然这里要区分系统调用和库函数还有内核调用,系统调用准确来讲是一个过程,我们使用库函数一步步陷入到内核完成我们的功能的过程,另外一个说法是库函数包装了系统调用,而内核调用和系统调用对于大内核来讲应该是没有区别的,都是直接切入到内核,而对于minix的这种微内核来讲,存在这样一个区别,系统调用一般是用户切入到内核,而内核调用往往是服务器和驱动切入内核,而且事实上minix还有任务调用的概念,服务器之间切换,这都不是很重要。
到这里,操作系统的一些小东西差不多介绍完了,下面开始介绍一个很重要的概念,进程!
本文出自 “这与那” 博客,请务必保留此出处http://hereandthere.blog.51cto.com/7561107/1416836
原文地址:http://hereandthere.blog.51cto.com/7561107/1416836