1、操作系统讲义,西安财经学院,1,操作系统概述,系统启动及用户界面,进程管理与调度,进程同步,第一章,第二章,第三章,第四章,Contents,课程内容安排,西安财经学院,设备管理,第六章,2,第二章 系统启动及用户界面,操作系统的接口,1,操作系统的引导和启动,2,Linux操作系统的安装,3,西安财经学院,3,PC机系统主板构架,操作系统在哪里?,4,操作系统的引导和启动,CMOS(Complementary Metal Oxide Semiconductor),互补金属氧化物半导体,是组成CMOS数字集成电路的半导体工艺。在计算机中是用来保存计算机基本启动信息(如日期、时间、启动设置等)的
2、芯片。 BIOS (BasicInput-OutputSystem)基本输入输出系统,其内容集成在微机主板上的一个ROM芯片上,主要保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机上电自检程序和系统启动自举程序等。 MBR(Main Boot Record)主引导记录存放在磁盘的第一个扇区里,系统启动时,它自动装入内存并由它负责装入操作系统的其他部分。,5,BIOS功能主要包括以下方面:,一是BIOS中断服务程序,包括操作系统对软盘、硬盘、光驱、键盘、显示器等外围设备的管理,操作人员可以通过访问INT5、INT13等中断点而直接调用BIOS中断服务程序。 二是BIOS系统设置程
3、序,在BIOS ROM芯片中装有“系统设置程序”,主要用来设置CMOS RAM中的各项参数。这个设置CMOS参数的过程,习惯上也称为“BIOS设置”。 三是POST上电自检程序,接通电源后,由POST(PowerOnSelfTest,上电自检)程序来对内部各个设备进行检查。通常完整的POST自检将包括对CPU、内存、ROM、主板、CMOS存贮器、串并口、显示卡、软硬盘子系统及键盘进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。 第四为BIOS系统启动自举程序,系统在完成POST自检后,BIOS就首先按照系统CMOS设置中保存的启动顺序搜寻软硬盘驱动器及CDROM、网络服务器等有效
4、启动驱动器,读入操作系统引导记录,然后将系统控制权交给引导记录,并由引导记录来完成系统的顺利启动。,6,7,2.1 用户工作环境,1 用户环境 用户工作环境的形成 设计合理的操作命令,它允许用户处理由操作系统支持的各种目标。 系统要提供各种硬件、软件资源,并提供关于操作系统的实用说明。 将操作系统装入计算机,并对系统参数和控制结构进行初始化,使计算机系统能够为用户服务。,8,2 系统生成和系统启动 系统生成 系统生成就是操作系统的生成过程。 是指为了满足物理设备的约束和需要的系统功能,通过组装一批模块来产生一个清晰的、使用方便的操作系统的过程。 系统生成包括:根据硬件部件确定系统构造的参数,编
5、辑系统模块的参数,并且连接系统模块成为一个可执行程序。 系统初启 系统初启又叫系统引导。其任务是把操作系统的必要部分装入主存并使系统进行初始化工作,最终处于命令接收状态。,2.1 用户工作环境,9,2.1 用户工作环境,系统引导分为三个阶段: 初始引导:把系统核心装入内存中的指定位置,并在指定地址启动; 核心初始化:执行系统核心的初启子程序,初始化系统核心数据; 系统初始化:为用户使用系统作准备。如建立文件系统、日历时钟等。 系统引导的方式 独立引导(bootup) 辅助下装(download),10,2.1 用户工作环境,独立引导方式(滚雪球方式) OS核心文件存储在系统本身的存储设备中 由
6、系统自己将OS核心程序读入内存并运行 最后建立一个操作环境 适用于微机和大多数系统。 辅助下装方式 OS主要文件不放在系统本身的存储设备中,而是在系统启动后,执行下装操作,从另外的计算机系统中将操作系统常驻部分传送到该计算机中,使它形成一个操作环境。 优点:可节省较大存储空间,下装的OS并非全部代码,只是常驻或专用部分,当这部分OS出现问题和故障时,可再请求下装。 适于多计算机系统、由主控机与前端机构成的系统及分布式系统。,11,2.1 用户工作环境,系统引导过程 (1) 初始引导(也叫自举) 初始引导的任务就是把核心送入主存并启动它运行。系统核心是存放在辅存上的。需要通过引导程序来进行装入。
7、 系统加电,硬件电子线路便会自动地把 ROM 中这段初始引导程序(辅存固定位置)读入内存,并将 CPU 控制权交给它; 执行初始引导程序,对系统硬件和配置进行自检,保证系统没有硬件错误; 从硬盘中读入操作系统引导程序,并将控制权交给该程序模块。 引导程序执行,将操作系统核心文件读入内存,并将控制交给核心的初始化程序。,12,2.1 用户工作环境,(2)核心初始化 初始化系统数据结构及参数: 建立进程有关的数据结构 获得自由存储空间的容量,建立存储管理的数据结构 建立系统设备和文件系统的数据结构 初始化时钟 核心页表寄存器与核心数据初始化 建立0号进程。 建立1号进程。实现系统的初始化。,(3)
8、系统初始化 完善OS的操作环境,装载命令处理程序(或图形用户界面),并初始化; 在多用户系统中,为每个终端建立命令解释进程,使系统处于命令接收状态。 由1号进程执行初始化程序,为控制台终端建造一个进程,执行命令解释程序,等待接受用户的命令。,13,14,WINDOWS 系统的引导 打开机器电源 ROM中引导程序运行,装入系统盘中的主引导程序。 主引导块程序执行,读入操作系统核心程序。 系统初始化的工作:包括系统资源初始状态的设置、系统主要数据结构初始化、引导图形用户界面程序。 图形用户界面运行,生成用户的图形用户界面,系统初启工作完成。,15,UNIX系统初启 UNIX操作系统执行代码装入内存
9、 存储空间及其管理机构初始化 与设备有关的初始化 与文件系统有关的初始化 创建0和1进程 1进程创建各终端进程 终端进程运行shell 各用户终端上出现 login,16,Linux系统引导 启动时要加载核心,让核心来驱动整个硬件。 整个启动过程: 1 加载BIOS的硬件信息,并获得第一个启动设备的代号(CMOS中设定的启动项)。2 读取第一个启动设备的MBR的引导加载程序(lilo、grub、spfdisk) 3 加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备。 4 核心执行init程序并获取运行信息。 5 Init执行/etc/rc.d/rc.sysinit文件 6
10、启动核心的外挂模块(/etc/modprobe.conf)7 Init 执行各个批处理文件(根据运行级别)。8 Init 执行/etc/rc.d/rc.local文件 9 执行/bin/login程序,等待用户登录。10登录之后开始以shell控制主机。,17,2.1.3 运行一个用户程序的过程 作业 计算机系统按指定步骤对初始数据进行处理并得到计算结果的加工工作。 作业有其对应的程序和数据。将作业装入主存,指的就是将该作业的程序和数据装入主存。 作业步 加工工作中的一个步骤称为作业步。,2.1 用户工作环境,作业:是指在一次应用业务处理过程中,从输入开始到输出结束,用户要求计算机所做的有关该
11、次业务处理的全部过程称为一个作业。 批处理系统中作业是抢占内存的基本单位。作业比程序的概念更广:它由程序、数据、作业说明书组成。 作业流(Job Stream):一批作业在系统控制下,依次输入到后援存储器中等待运行,就形成了一个作业流。,18,作业步:通常一个作业又可分为若干个顺序处理的步骤。作业步就是在一个作业处理的过程中计算机所做的相对独立的工作. 作业步之间有一定的关联的,其关联关系: 一个作业中的各作业步必须是顺序执行的; 前一个作业步的输出是下一个作业步的输入; 一个作业步能否正确执行,依赖于前一个作业步是否成功地完成。,19,20,作业处理步骤 编辑:建立一个新文件,或对已有的文件
12、中的错误进行修改。 编译:将源程序翻译成目标代码。 连接:主程序和其他所需要的子程序和例行程序连接装配在一起,使之成为一个可执行的、完整的主存映像文件。 运行:将主存映像文件调入主存,并启动运行,最后得出计算结果。 作业步是相互关联、顺序地执行,2.1 用户工作环境,作业的定义,21,典型的作业步:,该作业的作业步1,该作业的作业步2,该作业的作业步3,22,23,作业步之间的关系user.c user.obj user.exe编辑 编译 连接 运行第一个 第二个 第三个 第四个 作业步 作业步 作业步 作业步 每个作业步运行的结果产生下一个作业步所需要的文件; 一个作业步能否正确地执行,依赖
13、于前一个作业步是否成功地完成。,2.1 用户工作环境,24,2.1 用户工作环境,编译过程中,要为连接装配工作准备,形成内部符号表和外部调用表。 内部符号表:本模块可以被其他程序调用的入口点; 外部符号表:本模块要调用的外部的程序模块名。 连接的主要工作是确定本模块和其他所需要的目标模块之间的调用关系,并进行地址连接,形成主存映像文件。当该程序要进入主存运行时,由装载程序负责加载。,25,静态连接和动态链接 静态连接 :将所需的外部调用函数链接到目标文件中形成为一个完整的主存映像文件。 静态连接的缺点 若多个应用程序都调用了同一个库函数,那么,这些应用程序的目标文件中都包含了这个外部函数对应的
14、代码,造成主存极大的浪费。 动态连接:不需要将外部函数代码从库中提取出来并连接到目标文件中,而是在应用程序中需要调用外部函数的地方作记录,并说明要使用的外部函数名和引用入口号,形成函数调用链表。 所需支持DLL(动态连接库) 当 Windows的装载程序将应用程序和DLL装入内存后,装载程序会遍历形成函数调用链表,将DLL中函数在内存的入口(段:偏移)填入链表中的每个结点。,2.1 用户工作环境,26,2.2 操作系统的用户界面,1 用户界面的概念 操作系统的用户界面 (或称接口) 是操作系统提供给用户与计算机打交道的外部机制。用户能够借助这种机制和系统提供的手段来控制用户所在的系统。 操作系
15、统的用户界面分两个方面: 操作界面:又称操作命令,用户通过这个操作界面来组织自己的工作流程和控制程序的运行。 程序界面:又称系统功能调用,任何一个用户程序在其运行过程中,可以使用操作系统提供的功能调用来请求操作系统的服务(申请主存、使用外设、创建进程或线程)。,27,2.2 操作系统的用户界面,操作系统提供的用户界面操作命令类型及与操作系统类型的关系: 键盘命令分时操作系统、个人计算机操作系统 图形化用户界面分时操作系统、个人计算机操作系统 作业控制语言批处理操作系统,28,2.2 操作系统的用户界面,键盘命令 系统为联机用户(交互作用的用户)提供键盘命令。 什么是键盘命令 是操作系统为联机用
16、户提供的一种操作命令,用户通过这一组命令直接控制和干预程序的运行 。 键盘命令的功能 分时操作系统 用于注册、通信、注销的各类命令。 个人计算机操作系统 用于通信的各类命令。,29,2.2 操作系统的用户界面,图形用户界面 什么是图形化的用户界面 图形化用户界面是良好的用户交互界面,它将菜单驱动、图符驱动、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境。 菜单驱动方式 是面向屏幕的交互方式,它将键盘命令以屏幕方式来体现。 命令和系统能完成的操作,用菜单分类分窗口在屏幕上列出。 用户像点菜一样选择命令或某种操作,以控制系统去完成指定的工作。 菜单系统的类型有多种,如下拉式菜单,上推式菜
17、单和随机弹出式菜单。,30,2.2 操作系统的用户界面,图符驱动方式 是一种面向屏幕的图形菜单选择方式。 图符(Icon)也称图标,是一个小小的图符符号。它代表操作系统中的命令、系统服务、操作功能、各种资源。 图形化的命令驱动方式: 当需要启动系统命令、请求系统资源或操作功能时,可以选择代表它的图符,并借助标记输入设备(鼠标器),采用鼠标器的点击和拖拽功能,完成命令和操作选择及执行。 图形化用户界面 是良好的用户交互界面,它将菜单驱动、图符驱动、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境。 Windows 系统就是这种图形化用户界面的代表。,31,2.2 操作系统的用户界面,图形
18、化的用户界面的特点 所有程序以统一的窗口形式出现 提供统一的菜单格式 系统资源、系统命令、操作功能以图标表示 统一的操作方法,32,2.2 操作系统的用户界面,作业控制语言 在脱机方式下系统提供作业控制语言(JCL)。 什么是作业控制语言 是一种命令语言,包括了对作业处理的命令和资源请求命令。 批处理系统中作业的组织 作业申请:作业名、需用CPU时间,最迟完成时间、资源请求(主存、外部)等。 操作说明书:编译命令、连接命令、运行命令等。 程序与数据,33,2.3 系统调用,什么是系统调用 系统调用是用户在程序一级请求操作系统服务的一种手段,它不是一条简单的硬指令,而是带有一定功能号的“访管指令
19、”。它的功能并非由硬件直接提供,而是由操作系统中的一段程序完成的,即由软件方法实现的。,系统调用是操作系统提供给编程人员的唯一接口,它通知内核为调用程序做各种操作,并在内核与调用程序之间交换数据。对用户屏蔽了操作系统的具体动作。 系统调用的分类1. 设备管理:这类系统调用被用来请求和释放设备,以及启动设备操作等。2. 文件管理:这类系统调用包括创建、删除文件,读、写文件操作以及移动文件指针等。3. 进程控制:当多个用户程序在系统内执行时引出了一个新的概念,称为进程。4. 进程通信:进程间传递消息或信号的系统调用。5. 存储管理:内存块的申请、释放,获取作业占用内存块的首址、大小等。6. 线程管
20、理:包括线程的创建、调度、执行、撤销等,34,系统调用示意图,35,36,操作系统如何为用户程序提供服务 操作系统提供实现各种功能的例行子程序,2.3 系统调用,37,如何调用操作系统服务功能 ? 采用统一的方式 访管指令 访管中断 访管指令(自愿进管指令) svc n svc表示机器访管指令的操作码记忆符 n为地址码(功能号) 访管中断 当处理机执行到访管指令时就发生中断,该中断称为访管中断,它表示正在运行的程序对操作系统的某种需求。,2.3 系统功能调用,38,操作系统基本服务是通过系统调用来处理的,实现这些服务是通过系统服务请求机构提供的。 系统服务请求(SSR)机构本质上是一个自陷门,
21、它的执行要发生访管中断。 系统功能调用的格式和功能号的解释因机器的不同而异,但任何不同的机器都有以下共同的特点: 每个系统调用对应一个功能号,要调用操作系统的某一特定例程,必须在访管时给出对应的功能号。 按功能号实现调用的过程大体相同,都是由软件通过对功能号的解释分别转入对应的例行子程序。,2.3系统功能调用,系统调用的处理过程,系统调用的处理过程,39,参数传递过程问题,怎样实现用户程序和系统程序间的参数传递? 常用的实现方法: 由陷入指令自带参数:陷入指令的长度有限的,且还要携带系统调用功能号,只能自带有限的参数 通过有关通用寄存器来传递参数:这些寄存器应是系统程序和用户程序都能访问,由于
22、寄存器长度较短,从而无法传递较多的参数 大多在内存中开辟专用堆栈区来传递参数,40,库函数和系统调用的区别,库函数可被修改、替换、增加,系统调用则不能; 系统调用是在管态模式下执行,在内核地址空间中运行;库函数是在目态模式下执行,在用户地址空间运行。 从时间片计时来看,系统调用的运行属于内核时间,而库函数调用运行属于用户时间。 从执行过程来看,系统功能调用需要切换到进程上下文的内核态,是通过中断机构来实现的,结束后再切换回去,安全性好;库函数则只是过程调用而已。,41,2.4 Linux用户界面,2.4.1 Linux系统安装方式 Linux模拟机Bochs机 Linux虚拟机-在Window
23、s系统下用虚拟机安装。常用的虚拟机软件有vmware和virtual pc。 Linux单系统-将整个机器安装成Linux系统。 Linux与Windows双系统- 在磁盘的不同分区分别安装Linux系统和Windows系统。 先安装Windows系统,事先为Linux系统留出充足的磁盘空间(不含在Windows分区中),42,硬盘的分区,1. 一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。 2. 分出主分区后,其余的部分可以分成扩展分区,一般是剩下的空间全部分成扩展分区,也可以不全分,剩余的空间就浪费了。 3. 扩展
24、分区不能直接使用,必须分成若干逻辑分区。所有的逻辑分区都是扩展分区的一部分。 硬盘的容量主分区的容量扩展分区的容量; 扩展分区的容量各个逻辑分区的容量之和。 4. 由主分区和逻辑分区构成的逻辑磁盘称为驱动器(Drive)或卷(Volume)。 5. 激活的主分区会成为“引导分区”(或称为“启动分区”),引导分区会被操作系统和主板认定为第一个逻辑磁盘。,43,GRUB,GRUB 是一个多重操作系统启动管理器。用来引导不同系统,如windows,linux GRUB对LINUX系统的启动: Title行:定义名字 Root行:表示/boot所在的分区 Kernel行:启动内核文件 Intrid行:
25、运行初始化模块,44,LINUX的系统启动,45,Linux 引导线路图,ROM BIOSbootsect.Ssetup.Shead.Smain.c 与Linux的启动部分密切相关的代码: 三个汇编语言程序bootsect.S、setup.S和head.S init目录下的main.c 启动引导时内核在内存中的位置和移动后的位置情况见Linux内核剖析图2.1,46,电源开启后,由机器的ROM BIOS先上电自检,然后负责将启动盘第一扇区(boot sector)中的内容主引导记录(MBR)从磁盘装入地址为0x7C00的内存空间,然后跳转至该位置执行。 由(GRUB或LILO)负责启动系统。,
26、47,48,Linux启动,装载程序按照OS标签来选择安装对应的OS内核。 LINUX系统内核首先执行init程序,它是所有运行进程的父进程。 init启动的第一批进程按照/etc/rc.d/rc.sysinit脚本来运行。 LINUX有7个不同的运行级别06 0:halt, 1:单用户,2:多用户,3:多用户并启动NFS服务 4:保留,5:运行xdm(X window)以图形界面方式登录 6:reboot,49,不同的运行级别启动不同的脚本,50,实模式与保护模式,开机后INTEL CPU在实模式(real mode)下工作,只能使用低端64KB内存空间。 在引导扇区中的内核模块是压缩的内核
27、模块zImage。其源代码为arch/i386/boot/bootsect.S 是实模式下运行的汇编程序。 将自己从0000:7C00移至9000:0000,并跳至该处继续执行。在Linux中0x9000代码段为INITSEG。,51,系统预备知识-as86汇编语言,汇编命令的基本格式: as 选项 o 目标文件名 源文件名 选项 用来控制编译过程,以产生指定格式和设置的目标文件。 伪操作符语句: 以.开始 汇编器编译生成的目标文件通常包括三个段:正文段(.text)、数据段(.data)和未初始化数据段(.bss) .global 伪操作符用于定义随后的标号是外部的或全局的。 entry 是
28、保留关键字,用于迫使连接器ld86在生成的可执行文件中包括进其后指定的标号start。 jmpi go BOOTSEG 是段间跳转语句,跳转后CS:IP=0x07c0:0005。,52,Intel CPU的寄存器结构,段寄存器、 专用寄存器、 系统地址寄存器、 控制寄存器、 通用寄存器,53,1、段寄存器,可见的6个段选择寄存器:CS, DS, SS, ES, FS, GS 高13位是索引值 d2指明段描述符所在的描述符表 d1 d0是特权标志 另外6个64位的段描述符高速缓冲寄存器(编程不可见,在保护模式下起作用) 32位基址,20位界限,段说明符信息,54,2、专用寄存器,EIP/IP 可
29、由跳转指令修改 EFLAGS/FLAGS 包括运算状态标志:CF, PF, AF, SF, OF 控制状态标志:DF, TF, IF, IOPL,55,3、系统地址寄存器 GDTR 、LDTR、IDTR、TR4、控制寄存器 4个32位寄存器:CR0CR3,56,5、通用寄存器,4个数据寄存器: AX/EAX/RAX: 累加器 BX/EBX/RBX: 基址索引,如,数组 CX/ECX/RCX: 计数器 DX/EDX/RDX: 数据或一般用途 4个指针及变址寄存器: SI/ESI/RSI: 用于字符串操作的源索引 DI/EDI/RDI: 用于字符串操作的目标索引 SP/ESP/RSP: 堆栈地址的
30、栈顶指针 BP/EBP/RBP: 堆栈地址的栈底指针,57,地址空间,内存地址空间(显示内存占用0x0B800x0BC0) 外设地址空间,需要用I/O指令访问。,58,访问外设的方法,1、查询 2、中断 3、DMA 4、通道,59,中断机制(两种事件),中断机制实际上是一种控制转换机制。通常分为两大类:中断、异常。 中断是用于处理来自CPU外部的异步事件的。包括可屏蔽中断和非屏蔽中断。 异常是用于处理由CPU在执行指令时自己检测到的异常状态。包括(异常)CPU自己检测到的出错、陷入和终止事件; (软中断)主动编程实现的INT0、INT 3、INTn。,60,中断的安排,031为NMI和系统异常
31、中断号 32255为INTR和软中断号 0x80为系统调用软中断号,61,Linux命令类型: 1、有关文件和目录的管理(ls,chmod等) 2、文件的处理和编辑(vi等) 3、文件系统的装卸(mount等) 4、有关系统管理和工作状态(password,kill等) 5、有关通讯个人工具(mail等) 6、有关硬件设备处理(stty对设备设置某些 I/O 选项 ) 7、有关程序开发(make, ld编译、链接程序等) 8、其他杂项(man手册、游戏等) http:/ Linux命令控制界面,62,Redhat Linux 9.0的窗口界面示例,2.4.2 Linux命令控制界面,63,Li
32、nux shell为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell环境中的命令提示符号 rootsmth root #用户名 主机名 目录名 提示符shell的提示符有二种: “#”:表示当前用户是超级用户。“$”:表示当前用户是普通用户。,2.4.2 Linux命令控制界面,$ ls -l total 2 -rw-r-r- 2 wzh book 22 Apr 20 20:37 motd -rw-r-r- 2 wzh book 796 Apr 20 20:37 passwd,64,t,2.4.3 Linux 系统调用,进程管理,65,目录管理,2.4.3 Linux 系统调用,66,其它,2.4.3 Linux 系统调用,67,,Thank You !,,西安财经学院,68,