大家好,欢迎来到IT知识分享网。
概述
操作系统也是一种软件,但是操作系统是一种非常复杂的软件。操作系统提供了几种抽象模型
操作系统入门
操作系统
代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。
在硬件的基础之上,有一层软件,这层软件能够响应用户的输入指令达到控制硬件的效果,这种软件被称之为‘操作系统’。
我们一般常见的操作系统主要有 Windows、Linux、FreeBSD 或 macOS ,这种带有图形界面的操作系统被称为 图形用户界面(Graphical User Interface, GUI),而基于文本、命令行的通常称为 Shell。
计算机硬件介绍
CPU
CPU 是计算机的大脑,它主要和内存进行交互,从内存中提取指令并执行它。一个 CPU 的执行周期是从内存中提取第一条指令、解码并决定它的类型和操作数,执行,然后再提取、解码执行后续的指令。重复该循环直到程序运行完毕。
中央处理单元(CPU)主要由运算器、控制器、寄存器三部分组成,从字面意思看运算器就是起着运算的作用,控制器就是负责发出CPU每条指令所需要的信息,寄存器就是保存运算或者指令的一些临时文件,这样可以保证更高的速度。
可以这么说,X86指令集中的指令是复杂的,一条很长指令就可以很多功能,而ARM指令集的指令是很精简的,需要几条精简的短指令完成很多功能。例如吃饭,在x86系统中就是一条长指令,而吃菜又是一条长指令;在ARM中 吃饭=张嘴+夹饭+送到嘴里+闭上嘴+咽下去,而吃菜=张嘴+夹菜+送到嘴里+闭上嘴+咽下去 一系列简单的指令构成。
X86的方向是高性能方向,因为它追求一条指令完成很多功能,而ARM的方向是面向低功耗,要求指令尽可能精简。X86和ARM的各自主要方向决定了他们的市场。X86的市场主要是PC和服务器,因为需要高性能。ARM的市场主要是手机和平板,因为需要低功耗。
由于访问内存获取执行或数据要比执行指令花费的时间长,因此所有的 CPU 内部都会包含一些寄存器来保存关键变量和临时结果。因此,在指令集中通常会有一些指令用于把关键字从内存中加载到寄存器中,以及把关键字从寄存器存入到内存中。还有一些其他的指令会把来自寄存器和内存的操作数进行组合,例如 add 操作就会把两个操作数相加并把结果保存到内存中。
多线程和多核芯片
多线程(multithereading) 由Intel公司提出,X86处理器大部分是多线程的,近似地说,多线程允许 CPU 保持两个不同的线程状态并且在纳秒级(nanosecond) 的时间完成切换。线程是一种轻量级的进程,我们会在后面说到。例如,如果一个进程想要从内存中读取指令(这通常会经历几个时钟周期),多线程 CPU 则可以切换至另一个线程。多线程不会提供真正的并行处理。在一个时刻只有一个进程在运行。
进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,且至少有一个线程。
线程:与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
并行:同时进行,如:一边打电话,一边炒菜;
并发:在一段时间内交替进行,显得好像是“同时”进行,如:在厨房炒菜,听到座机响了,于是去客厅接电话,然后再回到厨房炒菜,再去客厅接电话……
单 CPU 多线程提供的是并发能力;而多 CPU 则可以提供并行能力
存储器
计算机中第二个主要的组件就是存储器。理想情况下,存储器应该非常快速(比执行一条指令要快,从而不会拖慢 CPU 执行效率),而且足够大且便宜,但是目前的技术手段无法满足三者的需求。于是采用了不同的处理方式,存储器系统采用一种分层次的结构
寄存器
存储器的顶层是 CPU 中的寄存器,它们用和 CPU 一样的材料制成,所以和 CPU 一样快。程序必须在软件中自行管理这些寄存器
高速缓冲 cache
主内存
主内存也叫主存,通常包括RAM(Random Access Memory)和ROM(Read Only Memory),其他还有EEPROM(Electrically Erasable PROM)和闪存(Flash Memory)。
RAM:RAM又称随机存取存储器,存储单元的内容可按照需要随机取出或存入,且存取的速度与存储单元的位置无关。这种存储器在断电时,将丢失其存储内容,所以主要用于存储短时间使用的程序。它主要用来存储程序中用到的变量。凡是整个程序中,所用到的需要被改写的量(包括全局变量、局部变量、堆栈段等),都存储在RAM中。
ROM:它是一种只能读出事先所存的数据的固态半导体存储器。ROM中所存数据稳定,一旦存储数据就再也无法将之改变或者删除,断电后所存数据也不会消失。其结构简单,因而常用于存储各种固化程序和数据。
为了便于使用和大批量生产,进一步发展出了可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)。EPROM需要用紫外线长时间照射才能擦除,使用很不方便。1980s又出现了电可擦除可编程只读存储器(EEPROM),它克服了EPROM的不足,但是集成度不高、价格较贵。于是又发展出了一种新型的存储单元结构同EPROM类似的快闪存储器(FLASH MEMORY)。FLASH集成度高、功耗低、体积小,又能在线快速擦除,因而获得了快速发展。
磁盘/硬盘
这一类的存储器也叫外部存储器/辅助存储器,或者外存/辅存,一般处理速度较慢、价格较低、容量较大。
虚拟内存机制
这种机制使得期望运行的存储空间大于实际的物理存储空间。其方法是将程序放在磁盘上,而将主存作为一部分缓存,用来保存最频繁使用的部分程序,这种机制需要快速映像内存地址,用来把程序生成的地址转换为有关字节在 RAM 中的物理地址。这种映像由 CPU 中的一个称为 存储器管理单元(Memory Management Unit, MMU) 的部件来完成。
I/O设备(Defalt)
实现I/O的方式有四种,分别为:
总线
总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线。总线是一种内部结构,它是 cpu、内存、I/O设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。
总线可以分为以下三大类:片内总线、系统总线和通信总线
片内总线
片内总线是指芯片内部的总线,如在 CPU 芯片内部,寄存器与寄存器之间、寄存器与算逻单元 ALU 之间都由 片内总线连接。
系统总线
系统总线可以分为三个:数据总线、地址总线和控制总线
系统总线是指 CPU、主存、IO 设备(通过I/O接口)各大部件之间的信息传输线。由于这些部件通常都安放在主板或各个插件板(插卡)上,故又称板级总线(在一块电路板上各芯片间的连线)或板间总线
数据总线:
数据总线用来传输各功能部件之间的数据信息,它是双向传输总线,其位数与机器字长、存储字长有关,一般为 8 位、16 位或 32 位。数据总线的位数称为数据总线宽度,它是衡量系统性能的一个重要参数。
地址总线:
地址总线主要用来指出数据总线上的源数据或目的数据在主存单元的地址或 I/O 设备的地址。例如,欲从存储器读出一个数据,则 CPU 要将此数据所在存储单元的地址送到地址线上。又如,欲将某数据经 I/O 设备输出,则 CPU 除了需将数据送到数据总线外,还需将该输出设备的地址(通常都经 I/O 接口)送到地址总线上。可见,地址总线上的代码是用来指明 CPU 欲访问的存储单元或 I/O 端口的地址,由 CPU 输出,单向传输。地址线的位数与存储单元的个数有关,如地址线为 20 根,则对应的存储单元个数为 220。
控制总线:
由于数据总线、地址总线都是被挂在总线上的所有部件共享的,如何使各部件能在不同时刻占有总线使用权,需依靠控制总线来完成,因此控制总线是用来发出各种控制信号的传输线。
通常对任一控制线而言,它的传输是单向的。例如,存储器读/写命令或 I/O 设备读/写命令都是由 CPU 发出的。
但对于控制总线总体来说,又可认为是双向的。例如,当某设备准备就绪时,便向 CPU 发中断请求;当某部件(如 DMA 接口)需获得总线使用权时,也向 CPU 发出总线请求。
此外,控制总线还起到监视各部件状态的作用。例如,查询该设备是处于“忙”还是“闲”,是否出错等。因此对 CPU 而言,控制信号既有输出,又有输入。
常见的控制信号如下:
- 时钟:用来同步各种操作。
- 复位:初始化所有部件。
- 总线请求:表示某部件需获得总线使用权。
- 总线允许:表示需要获得总线使用权的部件已获得了控制权。
- 中断请求:表示某部件提出中断请求。
- 中断响应:表示中断请求已被接收。
- 存储器写:将数据总线上的数据写至存储器的指定地址单元内。
- 存储器读:将指定存储单元中的数据读到数据总线上。
- I/O读:从指定的I/O端口将数据读到数据总线上。
- I/O写:将数据总线上的数据输出到指定的I0端口内。
- 传输响应:表示数据已被接收,或已将数据送至数据总线上。
通信总线
通信是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线。
更多关于总线的知识请看博客总线介绍
计算机启动过程
计算机的启动步骤主要分为四步,BIOS → 主引导记录 → 硬盘启动 → 操作系统
BIOS
当电源开关启动后,主板会通电并初始化固件(即芯片集等),而BIOS(Basic Input Output System 基本输入输出系统)的运行代码则早已被刷入集成在主板的ROM芯片中。
BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做”硬件自检”(Power-On Self-Test),缩写为POST。如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。
硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。这时,BIOS需要知道,“下一阶段的启动程序”具体存放在哪一个设备。也就是说,BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做”启动顺序”(Boot Sequence)。
主引导记录
“主引导记录”只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。主引导记录由三个部分组成
硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,“主引导记录”因此必须知道将控制权转交给哪个区。分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做”主分区”。每个主分区的16个字节,由6个部分组成。
第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
相关问题请见MBR和GPT区别
硬盘启动
这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况。
- 情况A:卷引导记录
上一节提到,四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做”卷引导记录”(Volume boot record,缩写为VBR)。
“卷引导记录”的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。 - 情况B:扩展分区和逻辑分区
随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。
所谓”扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做”逻辑分区”(logical partition)。
计算机先读取扩展分区的第一个扇区,叫做”扩展引导记录”(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。
计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。但是,似乎很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种方式启动。 - 情况C:启动管理器
在这种情况下,计算机读取”主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的”启动管理器”(boot loader),由用户选择启动哪一个操作系统。
操作系统
控制权转交给操作系统后,操作系统的内核首先被载入内存。
以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。至此,全部启动过程完成。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131023.html