系列文章目录
Linux入门篇(三)——操作系统之进程原理
Linux入门篇(四)——操作系统之显存原理
Linux入门篇(五)——操作系统之文件原理
Linux入门篇(六)——操作系统之I/O原理
Linux入门篇(七)——操作系统之多核原理
文章目录
序言
本节内容为《计算机的心智操作系统之哲学原理》的总结,因为个人认知有限,可能总结的不够确切,所以建议阅读完整书籍来学习。
学习操作系统须要具备什么能力?
1.擅于观察生活中细节的能力
2.C语言的能力
为何须要擅于观察生活中细节?
操作系统来始于生活,服务于生活。操作系统的大部份设计都是从生活中观察得到的现象进行具象所获得,所以只须要稍为留心一下生活中的细节,能够具备理解操作系统的能力。
为何须要C语言?
由于操作系统的代码大部份有C语言所写,作为一个工程师除了须要明白操作系统的设计原理,还要从代码中理解一个软件系统的真正运行机制,而要想理解一个软件系统的真正运行机制,正如Linux的创始人所说,一定要阅读其源代码(RTFSC-ReadTheFuckingSourceCode)。
学习理论知识的重要性?
非科班出身的程序员,大多擅于在实战中总结经验。并且对于现在庞大的操作系统来说,我们假如还是直接从实战开始,就如同盲人摸象,仍然不得要领。所以对于操作系统来说,学习理论知识就显得尤为重要,先居高临下,高屋建瓴的探寻概貌后,就能做到心里有数,学上去心领神会。
思维导图
一、操作系统介绍1.哪些是操作系统
这个世界上的所有东西都可以分为两类,一类是原本就存在于自然中,人类所做的只不过是发觉;另一类是原本并不存在,人类所做的是发明。而操作系统就是人造系统。
人造的特征:
操作系统中文名称为:OperatingSystem意味着掌控一切的系统。操作系统是掌控计算机上所有事情的软件系统,
从这个定义可以引申出操作系统的功能包括:
从以上功能再进行提高,就可以得出操作系统所饰演的两个根本角色:奇幻家和管理者。
操作系统可以把差的东西变好(多进程),把少的东西变多(虚拟显存),把复杂的东西变容易(复杂的东西由操作系统实现)linux运维面试题,如同一个奇幻家一样。
操作系统对CPU、内存、I/O、磁盘等的管理,可以使不同的用户之间或则同一用户的不同程序之间可以安全有序的共享那些硬件资源。
按照管理的资源不同,具体功能包括:
操作系统一个是软件,用户程序也是个软件,这么操作系统软件和用户程序软件是哪些样的一个关系?
很其实,操作系统为用户程序提供了一个虚拟机器的界面,而用户程序运行在这个界面之上,这是一个比较具象的理解。浅显一点的理解就是调用与被调用的关系。
从用户的角度看,是用户程序调用操作系统提供的服务redhat linux 下载,操作系统完成用户调用的服务后再返回给用户。这个时侯用户程序是主程序,操作系统是子程序。
从操作系统的角度看,计算机启动以后最先运行的实操系统程序,在次以后,操作系统不断的调用用户程序。这个时侯操作系统是主程序,用户程序是子程序。
实际上,也可以看作操作系统和用户程序是相互调用的动态关系,每位角度都对。
2.操作系统演化过程
驱动操作系统演化的量大诱因:
操作系统的演化就是一个我们对计算机硬件进行粉饰的过程,以下从时间先后次序介绍演化出的各类操作系统。
3.操作系统的基本概念计算机硬件基本知识
计算机硬件结构可以简单概括为:各类硬件设备挂在总线上,这种设备都有一个控制器,外部设备都由那些控制器与CPU通讯。
为了增强计算机效率,人们设计不仅流水线结构,将计算机的功能部件分为多个梯级,每条计算机指令同样拆分成多个步骤,每条指令在流水线上流动,到流水线最后一个梯级时执行完毕。
为了进一步提供效率,又发明了多流水线、超标量估算和超长指令字等多指令发射机制。
不仅指令单元,计算机的另一个重要部件是指令的储存单元,成为储存构架。
具象
操作系统提供的是一个具象。具象来始于具体linux操作系统结构,但又赶超具体。比如具体的计算机硬件,CPU、内存、I/O设备等,但又超过这种现实,使人和应用软件觉得到更多、更好的硬件存在。
除了这么,操作系统内部也分为不同的的功能块,而不同的功能块之间相互提供的也是具象。
内核态和用户态
运行在内核态的程序可以访问的资源更多,单可靠性、安全性要求高,维护管理都较复杂;用户态程序访问资源受限,但可靠性、安全性要求低。一个程序究竟应当运行在内核态还是用户态取决于其对资源和效率的需求。
态势的辨识
计算机可以通过CPU状态字里面的一个字位来判定正在运转的程序是在内核态还是用户态。
内核态与用户态的实现
为了给内核态程序赋于访问所有资源的特权,限制用户态程序访问资源的权限,可以通过对虚拟地址翻译的控制,就可以控制程序对资源的访问。
操作系统结构
操作系统的结构类似与政府的行政机构,每一层的功能各不相同,且下边一层只对前面一层负责,里面的层一般也只对其直属上层进行直接控制。
微内核结构
从上图可以看出操作系统的所有功能都在内核态运行linux操作系统结构,由于内核态程序可以访问所有资源,所以安全性和可靠性要求非常高,在操作系统很小时,其设计的可靠和安全还不是非常困难,而且随着操作系统越来越大,破坏者水平越来越高,操作系统的可靠性和安全性就显得很难达到。
为此,就有了微内核的结构,将要操作系统中的核心放到内核态运行,其他功能都移到用户态。这样就增强了安全性。
凡事有利必有弊,微内核频繁的进出内核态和用户态,又会带来效率上的损失。并且当前的趋势正是这些微内核的操作系统结构,至于这个微内核有多“微”,则是仁者见仁智者见智。
进程、内存、文件
进程是操作系统里面的核心概念。它指的是一个进展中的程序。操作系统对进程的管理通过进程表来实现。进程表里储存的有关于进程的一起信息。在任何一个时侯,进程所占有的全部资源,包括分配给该进程的显存、内核数据结构和软资源产生一个进程核(Core)。核快照(CoreImage)代表的是进程在某个特定时刻的状态。
显存是操作系统上面的另一个核心概念。它是进程的储存场所。显存管理就是使的数据的读写具有高效率、高安全、高空间借助率和位置透明的特点。
文件是操作系统提供的外部储存设备的具象,它是程序和数据的最终储存地点。
系统调用
系统调用就是操作系统提供的应用程序界面(API)。用户程序通过调用那些API获取操作系统的服务。
系统调用根据功能可以界定为六类:
壳(sheel)
用户程序通过调用操作系统提供的系统API来获得操作系统的各类服务。但使用API须要编程,为那些不编程的用户,操作系统提供了一个壳(sheel),来与用户交互。这个壳是覆盖在操作系统服务里面的一个用户界面,既可以是图形界面,也可以是文本界面。
实际上,用户输入的命令是不能直接操作系统服务的,而是通过C语言提供的库函数来解决这个问题。
一个壳的具体功能包括如下几项:
二、设计操作系统的哲学原理1.层次构架
操作系统的层次构架类似与人类社会的层次构架,例如政府的行政机构,每一层的功能各不相同,且下边一层只对前面一层负责,里面的层一般也只对其直属上层进行直接控制。
2.没有对错
人类的社会制度发生过多次变化。虽然如今,世界上也存在多种设计制度或形态。但不管社会制度和意识形态怎样,我们都能和平交往。可见,社会形态本身并无对错之分,只有优劣之分。
置于操作系统里,这条原则同样适用。如同我们不能说windows是对的,linux是错的。
3.懒人哲学
懒人哲学的合理智在于提早将事情做掉其实是一种浪费。由于没有人就能遇到未来会发生哪些事情,而情况的变化有可能导致上面所做事情毫无意义。诸如,系统在fork时,只创建一个空的子进程,而不进行兄妹进程地址空间的复制,这样,假如将来要运行新的程序,我们没有做任何无用功。
4.让困于人
最典型如对死锁的处理,尽管现代操作系统采取了部份举措来增加死锁的机率,然而都不能完全防止死锁的发生。这些不乐意花吃力气进行死锁的防止,却把死锁可能留给用户的煮饭就是典型的让困于人,即让用户来承当困难。
后续文章会专门讲解死锁形成的缘由,及应对方式。
5.留有余地
老话说,不可将事情做绝。操作系统的设计处处都存在这保留空间,就是为了便捷之后对系统的改善。
6.海市蜃楼之美
这正是操作系统的最大角色:魔术师。诸如,在操作系统上面,用户听到的显存是一个十分简单、具有线性美的一维链表。这个字段无限大(实际上与c盘一样的),速率无限快(实际上与缓存一样快)。单实际上我们的数学显存只有几个G(肯定没有c盘大),速率也只有缓存的非常之一。
7.沧海桑田之变
时间和空间的转换。诸如页表的实现(后续文章后续会专门阐述)。
8.策机分离与权利分离
裁判和运动员不能是同一个人。在操作系统里,策略可以由用户指定,操作系统则是执行机制。所以有了所谓的调度算法参数化,算法在内核里,参数可以用户指定。因为策机分离,操作系统在实现调度算法
9.求于至简、归于永恒
越简单的构架效率越高。
10.适可而止
简单不等于过分简单。诸如爱心斯坦说过一句话“一切都应当尽可能简单,但没有更简单”,这就给追求简单划分了限制。