读鸟哥的Linux后对操作系统的初识

一.先了解一下硬件方面的知识。

从外观上说,一般计算机分为以下三个部分:

    输入单元:包括键盘、鼠标等;
    主机部分:这个就是系统单元,被主机机壳保护住了,里面含有 CPU 和主存储器等;
    输出单元:例如屏幕、打印机等等。

整部主机的重点在于中央处理器 (Central Processing Unit, CPU),CPU为一个具有特定功能的芯片, 里头含有微指令集,如果你想要让主机进行什么特异的功能,就得要参考这颗 CPU 是否有相关内建的微指令集才可以。 由于 CPU 的工作主要在于管理和运算,因此在 CPU 内又可分为两个主要的单元,分别是: 算数逻辑单元和控制单元。

CPU 读取的数据都是从主存储器来的! 主存储器内的数据则是从输入单元所传输进来!而 CPU 处理完毕的数据也必须要先写回主存储器中, 最后数据才从主存储器传输到输出单元。

综上所说,我们会知道其实计算机是由几个单元所组成的,包括输入单元、 输出单元、CPU内部的控制单元、算数逻辑单元和主存储器五大部分。 相关性如下所示:


CPU其实内部已经有一些小指令集,我们所使用的软件都要经过CPU内部的微指令集来达成才行。

CPU种类: 分别是精简指令集(RISC)和复杂指令集(CISC)系统

单有CPU也无法运作计算机,所以计算机还需要其他的接口设备才能够实际运作,最重要的接口设备是主板!因为主板负责将所有的设备通通连接在一起,让所有的设备能够进行协调和沟通。 而主板上面最重要的组件就是主板芯片组!这个芯片组可以将所有的设备汇集在一起!

假设计算机是一个人体,那么每个组件对应到哪个地方呢?

CPU=脑袋瓜子:每个人会做的事情都不一样(微指令集的差异), 但主要都是透过脑袋瓜子来进行判断和控制身体各部分的活动;

主存储器=脑袋中的记录区块:在实际活动过程中,我们的脑袋瓜子能够将外界的互动暂时记录起来, 提供CPU来进行判断;

硬盘=脑袋中的记忆区块:将重要的数据记录起来,以便未来将这些重要的经验再次的使用;

主板=神经系统:好像人类的神经一样,将所有重要的组件连接起来,包括手脚的活动都是脑袋瓜子发布命令后, 透过神经(主板)传导给手脚来进行活动啊!

各项接口设备=人体和外界沟通的手、脚、皮肤、眼睛等:就好像手脚一般,是人体和外界互动的重要关键!

显示适配器=脑袋中的影像:将来自眼睛的刺激转成影像后在脑袋中呈现,所以显示适配器所产生的数据源也是CPU控制的。

电源供应器 (Power)=心脏:所有的组件要能运作得要有足够的电力供给才行!


主要的组件为:CPU、主存储器、磁盘装置(IDE/SATA)、总线芯片组(南桥/北桥)、显示适配器接口(PCI-Express)和其他适配卡(PCI)。

我们现在知道CPU的数据都是由主存储器提供,但主存储器的数据毕竟得由北桥送到CPU内。 如果某些常用的程序和数据可以放置到CPU内部的话,那么CPU资料的读取就不需要透过北桥了! 对于效能来说不就可以大大的提升了?这就是第二层快取(l2 cache)的设计概念。

事实上我们的计算机只认识0和1,记录的数据也是只能记录0和1而已,所以计算机常用的数据是二进制的。 但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言,台湾常用的语言就有英文、中文(又分正体和简体中文)、日文等。 那么计算机如何记录和显示这些数值/文字呢?就得要透过一系列的转换才可以了!底下我们就来谈谈数值和文字的编码系统!

事实上文本文件也是被记录为0和1而已,而这个档案的内容要被取出来查阅时,必须要经过一个编码系统的处理才行。 所谓的『编码系统』可以想成是一个『字码对照表』,

他的概念有点像底下的图示:


当我们要写入档案的文字数据时,该文字数据会由编码对照表将该文字转成数字后,再存入档案当中。 同样的,当我们要将档案内容的数据读出时,也会经过编码对照表将该数字转成对应的文字后,再显示到屏幕上。

常用的英文编码表为ASCII系统,这个编码系统中, 每个符号(英文、数字或符号等)都会占用1bytes的记录, 因此总共会有2的8次方=256种变化。

至于中文字当中的编码系统,由于各种问题,由国际组织ISO/IEC跳出来制订了所谓的Unicode编码系统, 我们常常称呼的UTF8或万国码的编码就是这个。

二.下面了解下软件

我们知道没有插电的计算机是一堆废铁,那么插了电的计算机是什么?』 答案是:『一堆会电人的废铁』!这是因为没有软件的运作,计算机的功能就无仍发挥之故。 就好像没有了灵魂的躯体也不过就是行尸走肉,重点在于软件/灵魂。

一般来说,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序,先了解一下什么是程序,尤其是机器程序。了解之后再说明为什么现在的计算机系统需要操作系统?

我们前面谈到计算机只认识0和1而已,而且计算机最重要的运算逻辑判断是在CPU内部, 而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容, 然后撰写让CPU读的懂得脚本给CPU执行,这样就能够让CPU运作了。

不过这样的流程有几个很麻烦的地方,包括:

需要了解机器语言:机器只认识0和1,因此你必须要学习直接写给机器看的语言!

需要了解所有硬件的相关功能函数:因为你的程序必须要写给机器看, 当然你就得要参考机器本身的功能,然后针对该功能去撰写程序代码。例如,你要让DVD影片能够放映, 那就得要参考DVD光驱的硬件信息才行。

程序不具有可移植性:每个CPU都有独特的微指令集,同样的,每个硬件都有其功能函数。 因此,你为A计算机写的程序,理论上是没有办法在B计算机上面运作的!而且程序代码的修改非常困难! 因为是机器码,并不是人类看的懂得程序语言!

程序具有专一性:因为这样的程序必须要针对硬件功能函数来撰写, 如果已经开发了一支浏览器程序,想要再开发档案管理程序时,还是得从头再参考硬件的功能函数来继续撰写。

为了解决这个问题,计算机科学家设计出一种让人类看的懂得程序语言, 然后创造一种『编译程序』来将这些人类能够写的程序语言转译成为机器能看懂得机器码, 如此一来我们修改不撰写程序就变的容易多了!目前常见的编译程序有C, C++, Java, Fortran等等。


但问题是,在这样的环境底下我们还是得要考虑整体的硬件系统来设计程序!

举例来说,当你需要将运作的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去, 所以你还得要了解到内存的地址是如何定位的。麻烦

为了要客服硬件方面老是需要重复撰写句柄的问题,所以就有操作系统(Operating System, OS)的出现

三.什么是操作系统

在早期想要让计算机执行程序就得要参考一堆硬件功能函数,并且学习机器语言才能够撰写程序。 同时每次写程序时都必须要重新改写,因为硬件不软件功能不见得都一致之故。那如果我能够将所有的硬件都驱动, 并且提供一个发展软件的参考接口来给工程师开发软件的话,那发展软件不就变的非常的简单了?那就是操作系统

操作系统核心(Kernel):让计算机硬件可以开始运作或者说准备好运作了的功能就是操作系统核心。

你的计算机能不能做到某些事情,都和核心有关! 只有核心有提供的功能,你的计算机系统才能帮你完成!举例来说,你的核心并不支持TCP/IP的网络协议, 那么无论你贩买了什么样的网卡,这个核心都无法提供网络能力的! 

操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。 

但整部系统只有核心的话,我们就只能看着已经准备好运作(Ready)的计算机系统,但无法操作他! 好像有点望梅止渴的那种感觉啦!这个时候就需要软件的帮忙了!

既然我的硬件都是由核心管理,那么如果我想要开发软件的话,自然就得要去参考这个核心的相关功能! 唔!如此一来不是从原本的参考硬件函数变成参考核心功能,还是很麻烦啊!有没有更简单的方法啊!

为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软件! 工程师只要遵守该开发接口那就很容易开发软件了!举例来说,我们学习C程序语言只要参考C程序语言的函式即可, 不需要再去考虑其他核心的相关功能,因为核心的系统呼叫接口会主动的将C程序语言的相关语法转成核心可以了解的任务函数, 那核心自然就能够顺利运作该程序了!


核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等等), 因此只要硬件不同,核心就得要进行修改才行。 而由于核心只会进行计算机系统的资源分配,所以在上头还需要有应用程序的提供,用户才能够操作系统的。 为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发接口, 那就是系统呼叫层。软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在该核心上头运作。

所以说, 操作系统其实就是核心和其提供的接口工具,不过就如同上面讲的,因为最初的核心缺乏了和用户沟通的亲和接口, 所以在目前,一般我们提到的『操作系统』都会包含核心和相关的用户应用软件!

操作系统的核心层直接参考硬件规格写成, 所以同一个操作系统程序不能够在不一样的硬件架构下运作。举例来说,Windows XP又分为32位及64位版本就是因为32/64位的CPU指令集不太相同, 所以当然要设计不同的操作系统版本了

操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出装置及文件系统文件。 如果没有其他的应用程序辅助,操作系统只能让计算机主机准备妥当(Ready)而已!并无法运作其他功能。 所以你现在知道为何Windows XP上面要达成网页影像的运作还需要类似PhotoImpact或Photoshop之类的软件安装了吧?

应用程序的开发都是参考操作系统提供的开发接口, 所以该应用程序只能在该操作系统上面运作而已,不可以在其他操作系统上面运作的。现在该知道某些游戏为何不能够在Linux上面安装了吧?

既然核心主要是在负责整个计算机系统相关的资源分配和管理,那我们知道其实整部计算机系统最重要的就是CPU和主存储器, 因此,核心至少也要有这些功能的

系统呼叫接口(System call interface) 刚刚谈过了,这是为了方便程序开发者可以轻易的透过和核心的沟通,将硬件的资源进一步的利用, 于是需要有这个简易的接口来方便程序开发者。

程序管理(Process control) 总有听过所谓的『多任务环境』吧?一部计算机可能同时间有很多的工作跑到CPU等待运算处理, 核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配才行!另外, 良好的CPU排程机制(就是CPU先运作那个工作的排列顺序)将会有效的加快整体系统效能。

内存管理

文件系统管理(Filesystem management) 文件系统的管理,例如数据的输入输出(I/O)等等的工作!还有不同文件格式的支持等等, 如果你的核心不认识某个文件系统,那么您将无法使用该文件格式的档案!例如:Windows 98就不认识NTFS文件格式的硬盘;

装置的驱动(Device drivers) 就如同上面提到的,硬件的管理是核心的主要工作之一,装置的驱动程序就是核心需要做的事情! 好在目前都有所谓的『可加载模块』功能,可以将驱动程序编辑成模块,就不需要重新的编译核心了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值