当前位置: 首页 > article >正文

操作系统——操作系统用户界面

0.关注博主有更多知识

操作系统入门知识合集

目录

3.1操作系统启动过程

3.1.1BIOS和主引导记录MBR

思考题:

 3.1.2操作系统的启动过程

思考题:

3.2用户界面

3.2.1用户界面概念

 思考题:

3.2.2系统调用

3.1操作系统启动过程

3.1.1BIOS和主引导记录MBR

计算机有两种模式:

  1.实模式:当计算机刚开机、刚上电、还没有加载操作系统的时候,计算器处于实模式(实地址模式,REAL MODE),程序将会按照8086的寻址方式方法直接访问物理地址0h-FFFFFh(1MB)的空间(我们说过没有操作系统的计算机也能运行程序)。其寻址并不是直接拿到物理地址,而是需要一定的转换,也就是说,当程序拿到某个地址,需要将其拆分为段地址:偏移地址,计算之后的结果才是物理地址。此时CPU只能支持单任务运行。

  2.保护模式:又称内存保护模式(PROTECT MODE)。当操作系统被加载到内存后,开始接管计算机之后,计算机就处于保护模式了。此时程序的寻址方式相较于实模式会变得更加复杂,在这种模式下程序基本上能够访问完整的内存空间,但并不是直接访问物理地址,而是操作系统通过一种特殊的手段使程序必须通过段页式的寻址机制访问内存。这种特殊手段称为虚拟内存技术。当计算机处于保护模式下时,应用程序和操作系统的运行环境都被保护,且CPU支持多任务运行。

具体分析计算机的实模式:

  1.实模式下,程序只能访问1MB的空间,这1MB的空间又被分成前640K[00000 -> 9FFFF]:基本内存;中间128K[A0000 -> BFFFF]:显卡显存;末尾256K[C0000 -> FFFFF]:BIOS。其中末尾256K的BIOS又分为[C0000 -> C7FFF]:显示卡BOIS;[C8000 -> CBFFF]:IDE控制器BIOS;最后64K[F0000 -> FFFFF]:系统BIOS

  2.系统BIOS:系统BIOS称为基本输入/输出系统,它是一个固件(以硬件形式存在的软件称为固件),它位于BIOS的最后64K。其功能为系统启动配置、基本设备的I/O服务、系统的加电自检和启动。

  3.系统启动配置:其实我们已经跟它见过面了,它就是CMOS设置。它能够让用户设置一些最基本的启动配置,例如是从磁盘启动操作系统还是从U盘启动操作系统。

  4.系统BIOS提供的基本设备的I/O服务:系统BIOS是一个固件,所以被加载到内存后就变成了真正意义上的软件。它提供I/O服务的方式是以中断的形式存在,不同的中断对应不同的功能。

每一种功能还有对应的子功能,例如13号中断信号,它对应软盘的I/O调用,具体怎么调用,就取决了子功能了。

 现在确定了基本I/O的工作,就需要进一步细化工作。例如13号中断信号的2号子功能,读扇区,这时候还需要提供一些参数以便直到读哪个扇区、读多少扇区等等。

   5.系统BIOS提供的加电自检功能:加电自检称为POST,计算机刚上电的时候,CPU执行开机之后的第一条指令跳转到POST进行自检。加电自检的功能是对基本硬件进行初始化工作,例如CPU、内存、显卡等等,如果检查出现错误,将会发出警报声提醒用户。POST加电自检以后,会依次查找显卡BIOS、调用显卡BIOS;然后依次查找其他设备的BIOS;然后显示启动画面,显示一些BIOS信息、芯片组型号、主板信息等等;然后从某种介质当中读取操作系统到内存中,最后操作系统接管计算机。

主引导记录MBR:

  MBR存放于主启动扇区中,主启动扇区位于磁盘的首个扇区(第一个磁面上的第一个磁道的第一个扇区),它的大小有512字节,存放和操作系统有关的相关信息(Main Boot Record)。我们知道操作系统是放在磁盘上的,所以操作系统被放进内存之前一定是由MBR做工作。但MBR并不会直接将操作系统写入内存,而是读取分区引导记录PBR。PBR位于操作系统所处的分区的首个扇区,它可以作为直接引导操作系统加载到内存的直接引导记录。

  由此我们可以推测出BIOS和MBR程序运行的过程大致是这样的:首先用户按下计算机的电源开关->CPU执行第一条指令跳转到POST进行开机自检->检查完成后,读取CMOS设置的操作系统的启动方式->CPU读取MBR到内存中来->MBR读取分区表,找到分区表中的活动分区(通常是操作系统所在的分区),并确认其他的分区都不是活动的(加载的操作系统只能有一个),然后MBR读取分区的PBR到内存中->PBR继续控制后面的操作系统的引导过程。

思考题:

1.BIOS中断时INT xxh的形式,例如INT 13H是磁盘读写服务。那么INT 21H与BIOS的中断信号的中断机制是不是一样的呢?

INT 21H是DOS的一个中断信号,DOS称为磁盘操作系统,它是负责直接管理磁盘的软件。而BIOS作为一个软件(因为它被放在内存中,BIOS是内嵌在主板上的),它发送的中断信号与DOS的中断信号是有本质区别的。DOS作为操作系统,它的INT 21H一定是一个系统调用,是为上层 应用程序提供的接口;而BIOS它不是操作系统,所以可以理解为INT 21H这个中断是提供给BIOS使用的。

 3.1.2操作系统的启动过程

操作系统的启动过程的定义是从计算机加电到操作系统加载完成,能够被用户使用的这么一段过程。它分为三个阶段:初始引导、核心初始化、系统初始化。

初始引导:

  1.目的:把操作系统核心装入内存并让操作系统开始接管计算机

  2.过程:计算机开机->加电自检->BIOS的启动程序运行,加载MBR到内存中->MBR加载PBR->加载硬盘上的操作系统内核,并初始化基本参数->内核加载到内存之后,会继续加载操作系统的剩余部分(例如微内核结构的操作系统,会加载核外服务器),最后完全控制计算机。

核心初始化:

  1.目的:操作系统内核初始化操作系统的核心数据

  2.典型工作:初始化各种寄存器、初始化存储系统和页表、构建核心进程......

系统初始化:

  1.目的:为用户使用操作系统做好准备,使操作系统处于待命状态

  2.主要工作:初始化文件系统、初始化网络系统、初始化控制台、初始化图形化界面......

Windows的启动过程:

  1.POST:加电后由BIOS启动主机的自检程序

  2.初始引导:BIOS读入MBR到内存,MBR引导DOS7.0的启动,并调入操作系统内核到内存,然后Windows接管计算机

  3.核心初始化:初始化资源状态、核心数据等

  4.系统初始化:GUI界面生成,用户可以随时使用操作系统,操作系统处于待命、消息接收状态

Linux的启动过程:

  POST->MBR->KERNEL映像->KERNEL映像边解压边执行->内核初始化->内核开始工作,接管计算机->系统初始化,生成控制台界面。

  需要注意的使,Linux的内核映像并不是一个完整的映像,而是一个压缩文件(可能前面的某些部分是解压后的真实代码),这个内核映像被加载到内存后是边解压边工作的。

思考题:

1.操作系统的初始化引导涉及哪些程序模块?存放的介质是什么?

初始化引导中的程序模块涉及到:BIOS的启动程序,它内嵌在主板的BIOS芯片上;硬盘当中的MBR和PBR,存放在硬盘对应分区的首个扇区当中;操作系统的内核,存放在硬盘的某个分区。

3.2用户界面

3.2.1用户界面概念

用户界面的定义:操作系统提供给用户控制计算机的机制,这种机制又称用户接口。

用户界面分为两类:用户可视化操作界面(可视化界面、控制台窗口、批处理程序);系统调用(通常被程序员使用)。

用户可视化操作界面:

  1.图形用户接口(GUI,Graphics User Interface):提供这种用户的接口的典型操作系统为Windows和MAC OS,它们由窗口、图标、菜单、按钮、鼠标等组成。

  2.键盘命令(COMMAND):在控制台环境下接收键盘输入的命令,这些命令分为普通命令、批处理程序、shell脚本等等。

  3.普通命令:以DOS操作系统为例,它的典型命令就有文件管理的命令COPY、COMP、TYPE、DEL、REN,磁盘管理的命令FOMAT、CHKDSK、DISKCOPY、DISKCOMP,目录管理的命令DIR、CD、MD、RD、TREE......以Linux操作系统为例,它的典型命令就有查看命名和帮助的指令man,改变工作路径的命令cd,列出目录信息的指令ls......以上列举的都是操作系统提供的普通命令。

  4.批处理程序:普通命令的集合,这些集合起来的命令按批处理,并且命令与命令之间具有一定的逻辑关系。批处理程序支持变量替换、条件、转移、循环、注释等基本的简单语法,在Windows环境下,批处理程序的后缀为.BAT(.bat)。我们编写一个最简单的批处理程序,它直接输出"Hello Bat"到控制台上。

@echo off
echo Hello Bat!
pause

   5.Shell:Shell是操作系统与用户交互的界面,它表现为通过控制台执行用户的命令,但实际上Shell本身不执行命令,而是组织和管理命令,将命令交给操作系统执行,然后执行的结果通过Shell返回给用户,所以我们说它是表现为执行用户的命令

   6.Shell的发展与分类:第一个Shell便是1970年诞生的Bsh,具有较强的脚本编程功能,随后便是1980年出现的Csh,使用C语言,用户命令交互方便;在此基础上,又诞生出了Ksh,Ksh结合了Bsh和Csh的优势;最后,现在主流的Shell便是Bash,Bash是对Bsh的升级,并且吸收了Ksh的特性,是一个开源的Shell。

   7.Bash的主要功能:Bash提供命令行编辑功能、命令和文件名补全功能、命令历史功能、命令别名功能、作业控制功能、管道与重定向、将命令序列定义为功能键的功能、Shell脚本编程。命令行编辑功能可以操作左右方向键,使得光标在当前命令行中以后字符间进行任意移动;退格键能够删除命令行中光标左边的字符;Del键能够删除当前光标处的字符......可以使用Tab键在命令查找路径中查找匹配的命令,并进行命令拼写的补全;使用Tab键可对文件和目录名进行补全......可以使用上下方向键浏览已输入的命令(历史命令)......在Linux的Bash上,可以使用'<'操作符将命令输入由默认的键盘更改(重定向)为指定的文件;操作符'>'将命令输出由默认的显示器更改(重定向)为指定的文件;操作符'>>'将命令输出重定向并追加到指定文件的末尾......

  8.Bash功能实例(以Linux为例):

    1.将命令输出重定向到文件:

     2.管道:管道是一种特殊的重定向操作,其操作符为'|',用于连接左右两个命令,将'|'左边命令的执行结果作为'|'右边命令的输入。并且在同一条命令中可以使用多个'|'连接多个命令。

 思考题:

1.比较Windows7与Linux早期版本都有哪些典型的操作界面?操作界面对普通用户选择操作系统有何影响?

Windows的GUI界面、Linux的Shell界面;对应用户来说,肯定会选择互动性高、方便、快捷、直观、易操作的操作系统;不过在不同的需求、环境下,选择的操作系统也有所差别,例如在公司企业当中不适合将Windows作为第一生产力操作系统,更加适合选择Linux。

3.2.2系统调用

操作系统提供的用户接口分为操作界面和系统调用,它们都是操作系统提供给用户与计算机互动的接口。操作界面通常被普通用户使用,系统调用通常被程序员使用。

系统调用的定义:

  操作系统内核为应用程序提供的服务/函数。例如DOS操作系统提供的21h(09)(21号中断9号功能),C语言库提供的printf函数(里面封装了向显示器输出的系统调用)、exit函数(里面封装了操作系统控制进程的函数)。

 系统调用的特点:

  1.系统调用一般都涉及核心资源或硬件的操作,所以系统调用的具体代码属于内核,运行于内核态

  2.每个系统调用具有唯一的编号(ID)

  3.调用系统调用会产生中断,这种中断属于自愿中断,因为是程序员安排中断在这里的

系统调用的中断过程:

  实际上与普通中断一样,都是令CPU暂定当前任务的执行,转向执行中断处理程序。

调用系统调用后,CPU如何发生态的转换? 

  1.DOS操作系统利用INT 21h中断发生态的转换。以一段汇编代码为例:

string DB 'Hello!'  ;定义要显示的字符串
  ......
MOV DX, string  ;DX字符串地址
MOV AH, 09h  ; AH-09h号子功能
INT 21h

指令"MOV AH,09h"将中断程序的入口地址填入AH寄存器,然后执行"INT 21h"指令,这条指令能够将CPU的态从用户态修改为内核态。

  2.Linux操作系统利用INT 80h中断发生态的转换。以一段汇编代码为例:

;输出字符串︰Hello World !
MOV EBX, 1   ;EBX送1表示stdout
MOV ECX, MSG ;字符串的首地址送入ecx
MOV EDX, 14 ;字符串的长度送入edx
MOV EAX 4   ;指定系统调用的编号
INT 80h     ;中断︰输出字串
MSG: DB "Hello World!"

指令"MOV EAX 4"将4号系统调用的入口地址填入EAX寄存器,然后执行"INT 80h"指令,使得该程序陷入内核,CPU工作在内核态。

隐式系统调用:

  类似于API函数,通常在高级语言中使用,其中包含有"INT 80h"中断指令,执行相应的系统调用。例如C语言程序:

#include <stdio.h>
int main()
{
  printf("Hello World!\n");
  exit(0);          
}

我们虽然看不到任何汇编指令,但熟悉C程序编译过程的朋友一定知道在编译阶段检查完语法之后生成汇编语句。对应的汇编语句就有"INT 80h"这条指令。

Linux系统调用的工作原理:


http://www.kler.cn/a/16864.html

相关文章:

  • 使用jmeter查询项目数据库信息,保存至本地txt或excel文件1108
  • PHP搭建开发环境(Windows系统)
  • react 中 FC 模块作用
  • 矩阵的各种计算:乘法、逆矩阵、转置、行列式等——基于Excel实现
  • 【Linux】进程池实现指南:掌控并发编程的核心
  • 【Qt】在 Qt Creator 中使用图片资源方法(含素材网站推荐)
  • C++入门(下)
  • 给你们讲个笑话——低代码会取代程序员
  • 360SEO 360搜索引擎算法的基础知识
  • Shell脚本3
  • 代码优美,搬砖不累:探索高质量代码之路
  • [架构之路-188]-《软考-系统分析师》-3-操作系统 - 图解页面替换算法LRU、LFU
  • 操作系统——第三章
  • 【FATE联邦学习】FATE是否支持batch分批训练?
  • 现代CMake高级教程 - 第 1 章:添加源文件
  • PowerJob基本概念
  • PHP学习笔记第一天
  • PHP+vue大学生心理健康评价和分析系统8w3ff
  • 每天一点C++——杂记
  • QT文本编辑与排版包含字体相关设置、段落对齐与排序方式
  • 树的刷题,嗝
  • 如果用上以下几种.NET EF Core性能调优,那么查询的性能会飙升
  • bash的进程与欢迎讯息自定义
  • C++命名空间的定义以及使用
  • C++煞笔笔记
  • 功能齐全的 DIY ESP32 智能手表设计之原理图讲解一