操作系统概述
操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心。
操作系统的作用是管理和控制计算机系统中的硬件和软件资源,例如,它负责直接管理计算机系统的各种硬件资源,如对CPU、内存、磁盘等的管理,同时对系统资源所需的优先次序进行管理。操作系统还可以控制设备的输入、输出以及操作网络与管理文件系统等事务。同时,它也负责对计算机系统中各类软件资源的管理。例如各类应用软件的安装、设置运行环境等。操作系统与计算机硬件软件关系图如下。
内核态和用户态
操作系统为了管理内存。将内存分为内核空间(内核态)和用户空间。内存空间和用户空间之间有隔离。程序需要访问系统资源必须向内核空间进行申请。由内核把数据读取到用户空间。
Linux操作系统中主要采用了0和3两个特权级,分别对应的就是内核态和用户态。运行于用户态的进程可以执行的操作和访问的资源都会受到极大的限制,而运行在内核态的进程则可以执行任何操作并且在资源的使用上没有限制。很多程序开始时运行于用户态,但在执行的过程中,一些操作需要在内核权限下才能执行,这就涉及到一个从用户态切换到内核态的过程
应用程序访问内核,一般有两种调用方式:系统调用和库函数调用
系统调用:应用程序直接调用操作系统提供的接口 如write 函数
库函数调用:应用程序通过一些库函数直接调用 如 fwrite
系统调用(英语:system call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。
库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。
函数库调用 | 系统调用 |
---|---|
平台移植性好 | 依赖于内核,不保证移植性 |
调用函数库中的一段程序(或函数) | 调用系统内核的服务 |
一个普通功能函数的调用 | 是操作系统的一个入口点 |
在用户空间执行 | 在内核空间执行 |
它的运行时间属于“用户时间” | 它的运行时间属于“系统”时间 |
属于过程调用,调用开销较小 | 在用户空间和内核上下文环境间切换,开销较大 |
库函数数量较多 | UNIX中大约有90个系统调用,较少 |
典型的C函数库调用:printf scanf malloc | 典型的系统调用:fork open write |
用户空间即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用
Linux和Unix
Unix系统于1969年在AT&T的贝尔实验室诞生,20世纪70年代,它逐步盛行,这期间,又产生了一个比较重要的分支,就是大约1977年诞生的BSD(Berkeley Software Distribution)系统。从BSD系统开始,各大厂商及商业公司开始了根据自身公司的硬件架构,并以BSD系统为基础进行Unix系统的研发,从而产生了各种版本的Unix系统.
70年代中后期,由于各厂商和商业公司开发的Unix及内置软件都是针对自己公司特定的硬件,因此在其他公司的硬件上基本无法直接运行,而且当时没有人对开发基于x86架构的CPU的系统感兴趣。另外,70年代末,Unix又面临了突如其来的被AT&T回收版权的重大问题,特别是要求禁止对学生群体提供Unix系统源代码,这样的问题一度引起了当时Unix业界的恐慌,也因此产生了商业纠纷。
Linux系统的诞生开始于1991年芬兰赫尔辛基大学的一位计算机系的学生,名字为Linus Torvalds。在大学期间,他接触到了学校的Unix系统,但是当时的Unix系统仅为一台主机,且对应了多个终端,使用时存在操作等待时间很长等一些不爽的问题,无法满足年轻的Linus Torvalds的使用需求。因此他就萌生了自己开发一个Unix的想法,于是不久,他就找到了前文提到的谭邦宁教授开发的用于教学的Minix操作系统,他把Minix安装到了他的I386个人计算机上。此后,Torvalds又开始陆续阅读了Minix系统的源代码,从Minix系统中学到了很多重要的系统核心程序设计理念和设计思想,从而逐步开始了Linux系统雏形的设计和开发。
GNU和GPL
GNU的全称为GNU's not unix,意思是"GNU不是UNIX",GNU计划,又称革奴计划,是由Richard Stallman在1984年公开发起的,是FSF的主要项目。这个项目的目标是建立一套完全自由的和可移植的类Unix操作系统。
GNU类Unix操作系统是由一系列应用程序、系统库和开发工具构成的软件集合,例如:Emacs编辑软件、gcc编译软件、bash命令解释程序和编程语言,以及gawk(GNU's awk)等,并加上了用于资源分配和硬件管理的内核。
到1991年Linux内核发布的时候,GNU项目已经完成了除系统内核之外的各种必备软件的开发。在Linux Torvalds和其他开发人员的努力下,GNU项目的部分组件又运行到了Linux内核之上,例如:GNU项目里的Emacs、gcc、bash、gawk等,至今都是Linux系统中很重要的基础软件。所以linux 又叫GNU/Linux
GPL全称为General Public License,中文名为通用公共许可,是一个最著名的开源许可协议,开源社区最著名的Linux内核就是在GPL许可下发布的。GPL许可是由自由软件基金会(Free Software foundation)创建的。