操作系统原理(三)操作系统用户界面

操作系统的用户界面

1、操作系统如何启动的

1.1、BIOS和主引导记录MBR

实模式(实地址模式,Real Mode)
学过微机的都知道Intel 8086的模式有两种:实模式和保护模式

8086中的七种寻址方式
8086/8088有七种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。

在这里插入图片描述

实模式的寻址方式
8086是16位的cpu,有着16位的寄存器,16位数据总线以及20位地址总线,可以访问1MB的内存。地址由 [段:偏移] 组成,物理地址的计算公式为: physical address = segment * 16 + offset 其中,segment和offset都是16位的。就是通过分段和映射,使得可访问内存扩大。

通过上述分段技术,能够表示的最大内存为:FFFFh:FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes(1M多余出来的部分被称做高端内存区HMA)。但8086/8088只有20位地址线,只能够访问1M地址范围的数据,所以如果访问100000h~10FFEFh之间的内存(大于1M空间),则必须有第21根地址线来参与寻址(8086/8088没有)。因此,当程序员给出超过1M(100000H-10FFEFH)的地址时,因为逻辑上正常,系统并不认为其访问越界而产生异常,而是自动从0开始计算,也就是说系统计算实际地址的时候是按照对 1MB 求模的方式进行的,这种技术被称为wrap-around。

到了 80286,虽然系统的地址总线由原来的20根发展为24根,这样能够访问的内存可以达到2^24=16MB,但是Intel在设计80286时提出的目标是向下兼容,所以在实模式下,系统所表现的行为应该和8086/8088所表现的完全一样,也就是说,在实模式下,80386以及后续系列应该和8086/8088完全兼容仍然使用20位地址线。

保护模式
从80386开始,进入32位cpu时代,有32位地址总线。寻址仍然采用了[段 : 偏移] 的模式,虽然段值仍然由原来的16位cs/ds等寄存器指定,但此时这些寄存器中存放的不再是段基址,而是一个索引:从这个索引,可以找到一个表项,里面存放了段基址等很多属性,这个表项称为段描述符,这个表就称为GDT。有关GDT的相关介绍,可以参考GDT详解。

  • 段大小
    实模式下段的大小是固定的64k,而保护模式则不是固定的。关于段基址,实模式下,低16位是0;保护模式下坚持4KB对齐,就是说低 12位 都是0。

  • 段基址的存放地点
    实模式下在cs/ds等寄存器中,保护模式在段描述符中,而要取得段描述符,又需要取得CS等中的段选择子。

  • 对段的保护机制
    实模式下没有提供对段的保护,保护模式下面提供了对段的保护机制。
    在这里插入图片描述

BIOS的位置
在这里插入图片描述
我们主要关系系统的BIOS,那么什么是BIOS呢?
在这里插入图片描述
BIOS是基本输入/输出系统的缩写,也称为系统BIOS,ROM BIOS或PC BIOS。这是在IBM PC兼容计算机上的引导过程(开机/启动)期间使用的一种固件。BIOS固件内置于个人电脑中,它是上电时运行的第一个软件。该名称本身源于1975年CP / M操作系统中使用的基本输入/输出系统。

固件Firmware是持久存储器,程序代码和存储在其中的数据的组合。包含固件的设备的典型示例是嵌入式系统,如交通信号灯,消费电器,数字手表,计算机,计算机外围设备,手机和数码相机。这些设备中包含的固件提供了该设备的控制程序。

BIOS的功能

  • 系统启动的配置
    在这里插入图片描述

  • POST加电自检和启动
    在这里插入图片描述

  • 基本的设备I/O服务
    在这里插入图片描述

其中中断的13H类型功能如下
在这里插入图片描述
如:
在这里插入图片描述


主引导记录MBR
MBR磁盘分区都有一个引导扇区,称为主引导记录,英文简称为MBR。主引导扇区位于整个硬盘的0磁头0柱面1扇区,包括硬盘主引导记录MBR(Master Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序,也就是操作系统引导扇区调入内存加以执行。
在这里插入图片描述
MBR 共占用了一个扇区,也就是 512 Byte。其中 446 Byte 安装了启动引导程序,其后 64 Byte 描述分区表,最后的 2 Byte 是结束标记。我们已经知道,每块硬盘只能划分 4 个主分区,原因就是在 MBR 中描述分区表的空间只有 64 Byte。其中每个分区必须占用 16 Byte,那么 64 Byte 就只能划分 4 个主分区。
在这里插入图片描述

MBR 中最主要的功能就是存储启动引导程序。

在这里插入图片描述

启动引导程序的作用

BIOS 的作用就是自检,然后从 MBR 中读取出启动引导程序。那么,启动引导程序最主要的作用就是加载操作系统的内核。当然,每种操作系统的启动引导程序都是不同的。

每种操作系统的文件格式不同,因此,每种操作系统的启动引导程序也不一样。不同的操作系统只有使用自己的启动引导程序才能加载自己的内核。如果我的服务器上只安装了一个操作系统,那么这个操作系统的启动引导程序就会安装在 MBR 中。BIOS 调用 MBR 时读取出启动引导程序,就可以加载内核了。

但是在有些时候,我的服务器中安装了多个操作系统,而 MBR 只有一 个,那么在 MBR 中到底安装哪个操作系统的启动引导程序呢?

很明显,一个 MBR 是不够用的。每块硬盘只能有一个 MBR 是不能更改的,所以不可能増加 MBR 的数量。系统只能在每个文件系统(可以看成分区)中单独划分出一个扇区,称作引导扇区(Boot Sector)。每个分区的引导扇区中也能安装启动引导程序,也就是说,在 MBR 和每个单独分区的引导扇区中都可以安装启动引导程序。这样多个操作系统才能安装在同一台服务器中(每个操作系统要安装在不同的分区中),而且每个操作系统都是可以启动的。

还有一个问题,BIOS 只能找到 MBR 中的启动引导程序,而找不到在分区的引导扇区中的启动引导程序。那么,要想完成多系统启动,我们的方法是増加启动引导程序的功能,让安装到 MBR 中的启动引导程序(GRUB)可以调用在分区的引导扇区中的其他启动引导程序。

因此,启动引导程序拥有以下功能:

  • 加载操作系统的内核。这是启动引导程序最主要的功能。
  • 拥有一个可以让用户选择的菜单,来选择到底启动哪个系统。大家如果在服务器上安装过双 Windows 系统,就应该见过类似的选择菜单,不过这个选择菜单是由 Windows 的启动引导程序提供的,而不是 GRUB。
  • 可以调用其他的启动引导程序,这是多系统启动的关键。不过需要注意的是,Windows 的启动引导程序不能调用 Linux 的启动引导程序,所以我们一般建议先安装 Windows,后安装 Linux,是为了将 Linux 的启动引导程序安装到 MBR 中,覆盖 Windows 的启动引导程序。
    在这里插入图片描述

1.2、操作系统的启动过程解析

按下电源键瞬间,第一条执行指令位于FFFF0处,JUMP POST;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.3、Windows的启动过程

在这里插入图片描述

1.4、Linux的启动过程

在这里插入图片描述

2、如何生成一个操作系统(利用已有的内核)

在这里插入图片描述

Linux系统的生成步骤

在这里插入图片描述

具体步骤实现:
在这里插入图片描述

  • 方式3
    在这里插入图片描述
  • 方式2在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.操作系统的用户界面

3.1、操作系统的用户界面

操作界面分类:
在这里插入图片描述

常用普通命令
在这里插入图片描述在这里插入图片描述
批处理命名
批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为bat。

目前比较常见 的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。这里要讲的就是DOS批处理。

批处理是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND.COM或者CMD.EXE)解释运行。类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用if,for,goto等命令控制程序的运行过程,如同C,Basic等中高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。

批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在“命令提示”下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe运行该批处理程序。一般情况下,每条命令占据一行;当然也可以将多条命令用特定符号(如:&、&&、|、||等)分隔后写入同一行中;还有的情况就是像if、for等较高级的命令则要占据几行甚至几十几百行的空间。

系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令,直至程序结尾或遇见exit命令或出错意外退出。
在这里插入图片描述

3.2、Shell脚本编程

Shell在计算机科学中指“为用户提供用户界面”的软件,通常指的是命令行界面的解析器。一般来说,这个词是指操作系统中提供访问内核所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的层面。因此与之相对的是内核,内核不提供和用户的交互功能。在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

Shell的发展与分类
在这里插入图片描述

Bash的主要功能
在这里插入图片描述

下面是各种功能的介绍:

  • 命令行编辑功能
    在这里插入图片描述
  • 命令行补全功能在这里插入图片描述
  • 命令历史与命令重复在这里插入图片描述
  • 管道与重定向操作在这里插入图片描述在这里插入图片描述

4、系统调用

在电脑中,系统调用(英语:system call),指运行在使用者空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态执行。如设备IO操作或者进程间通信。
在这里插入图片描述
在这里插入图片描述

4.1、用户空间(用户态)和内核空间(内核态)

操作系统的进程空间可分为用户空间和内核空间,它们需要不同的执行权限。其中系统调用运行在内核空间。

4.2、库函数

系统调用和普通库函数调用非常相似,只是系统调用由操作系统内核提供,运行于内核核心态,而普通的库函数调用由函数库或用户自己提供,运行于用户态。

4.3、典型实现(Linux)

Linux 的系统调用通过 int 80h 实现,用系统调用号来区分入口函数。操作系统实现系统调用的基本过程是:

应用程序调用库函数(API);

  • API 将系统调用号存入 EAX,然后通过中断调用使系统进入内核态;
  • 内核中的中断处理函数根据系统调用号,调用对应的内核函数(系统调用);
  • 系统调用完成相应功能,将返回值存入 EAX,返回到中断处理函数;
  • 中断处理函数返回到 API 中;
  • API 将 EAX 返回给应用程序。

应用程序调用系统调用的过程是:

  • 把系统调用的编号存入 EAX;
  • 把函数参数存入其它通用寄存器;
  • 触发 0x80 号中断(int 0x80)。

4.4、典型实现(Dos)

在这里插入图片描述在这里插入图片描述

4.5、隐式系统调用和Linux系统调用原理

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/107788583