1、1(一一)(二二)(三三)(四四)(五五)1(一一)用户工作环境用户工作环境一一.用户工作环境用户工作环境的形成的形成 1.系统要提供各种硬件、软件资源 2.设计合理的操作命令 3.形成一个可供使用的工作环境 将操作系统装入计算机并初始化。1 1.系统引导的任务系统引导的任务 系统引导又叫系统初启。其任务是把操作系统的必要部分装入主存并使系统进行初始化工作,最终处于命令接收状态。二二.操作系统的引导操作系统的引导 12.系统引导的方式系统引导的方式 (1)独立引导方式独立引导方式(滚雪球方式滚雪球方式)OS核心文件存储在系统本身的存储设备中 由系统自己将OS核心程序读入内存并运行 最后建立一个
2、操作环境适用于微机和大多数系统。操作系统的引导有两种方式:独立引导(bootup)辅助下装(download)1(2)辅助下装方式辅助下装方式 优点 可以节省较大的存储空间,下装的OS并非是全部代码,只是常驻部分或者专用部分,当这部分OS出现问题和故障时,可以再请求下装。适用于多计算机系统、由主控机与前端机构成的系统以及分布式系统。OS主要文件不放在系统本身的存储设备中,而是在系统启动后,执行下装操作,从另外的计算机系统中将操作系统常驻部分传送到该计算机中,使它形成一个操作环境。13.独立引导方式独立引导方式(滚雪球方式滚雪球方式)的过程的过程(1)初始引导初始引导 系统加电;执行初始引导程序
3、,对系统硬件和配置进行自检,保证系统没有硬件错误;从硬盘中读入操作系统引导程序,并将控制权交给该程序模块。(2)引导程序执行引导程序执行 引导程序执行,将操作系统核心文件读入内存,并将控制交给核心的初始化程序。1(3)核心初始化核心初始化 初始化系统数据结构及参数:建立进程有关的数据结构 获得自由存储空间的容量,建立存储管理的数据结构 建立系统设备和文件系统的数据结构 初始化时钟(4)系统初始化系统初始化 完善OS的操作环境,装载命令处理程序(或图形用户界面),并初始化;在多用户系统中,为每个终端建立命令解释进程,使系统处于命令接收状态。14.实例操作系统的引导过程实例操作系统的引导过程(1)
4、MS-DOS启动启动 BIOS的初始引导程序,读入系统盘中的引导程序 由引导程序读入操作系统核心程序 IO.SYS(I/O初始化)DOS.SYS(文件系统,简单内存初始化)COMMAND.COM(简单任务管理)进入命令提符状态 C:1(2)WINDOWS 系统的引导系统的引导 打开机器电源 ROM中引导程序运行,装入系统盘中的主引导程序 主引导块程序执行,读入操作系统核心程序 系统初始化的工作:包括系统资源初始状态的设置、系统主要数据结构初始化、引导图形用户界面程序 图形用户界面运行,生成用户的图形用户界面,系统初启工作完成1(3)UNIX系统初启系统初启 UNIX操作系统执行代码装入内存 存
5、储空间及其管理机构初始化 与设备有关的初始化 与文件系统有关的初始化 创建0和1进程 1进程创建各终端进程 终端进程运行shell 各用户终端上出现 login1(4)Linux系统初启系统初启 Linux系统是以滚雪球的方式启动的:加电或复位BIOS的启动 (bootsect.s)Boot Loader OS初始化 (引导程序)系统加电或复位系统加电或复位 对内存中所有的数据清零,对内存进行校验,若无错,CS:IP BIOS入口。1 BIOS启动启动 在ROM中的引导程序放在固定位置:FFFF:0000 CPU从这里开始执行。上电自检;对硬件设备进行检测和连接,并将测得的数据BIOS数据区。
6、从盘中读入Boot Loader(引导程序)从硬盘启动时,读入零柱面零磁道1扇区MBR(Master Boot Record),将控制权交Boot Loader 1 Boot Loader(引导程序引导程序)功能:将OS读入内存,并将控制权交给OS的初始化程序。LILO LILO是一个在 Linux环境下编写的引导程序。它可以引导Linux;也可以引导其他操作系统,如Windows。它可以作为Linux分区的引导扇区内的启动程序;也可以放在MBR中完全控制Boot Loader的全过程。主要功能:将 Linux内核(或其他操作系统分区)读入内存 提供一个命令行接口,可由用户选择OS。1 系统核
7、心初始化系统核心初始化(Setup.s)Setup的工作 a.检查调入内存中的代码;b.获取内存容量信息,设置设备模式;c.屏蔽中断,准备进入保护模式;d.设置中断描述符表(idt),全局描述符表(gdt)控制权交给 Head.s Head.s的工作 a.对中断向量表作准备工作;b.检查CPU类型;c.调用Setup_paging进行页面初始化;d.调用main.c中的Start_kernel()1 Start_kernel的工作 a.对与CPU、内存等最基本硬件相关部分进行初始化;b.对中断向量表进行初始化;c.为进程调度程序作准备;d.设置基准时钟;e.内核的内存分配;f.对文件系统进行初
8、始化;g.建立init进程。init进程对每一个联机终端建立“getty”进程 getty在终端上显示“login”,等待用户登录。1 5.系统生成系统生成 系统生成就是操作系统的生成过程 (1)什么是系统生成什么是系统生成 所谓系统生成,就是指为了满足物理设备的约束和需要的系统功能,通过组装一批模块来产生一个清晰的、使用方便的操作系统的过程。(2)系统生成的内容系统生成的内容 根据硬件部件确定系统构造的参数,编辑系统模块的参数,并且连接系统模块成为一个可执行的程序。17一一.作业与作业步作业与作业步 1.作业作业 计算机系统按指定步骤对初始数据进行处理并得到计算结果的加工工作。2.作业步作业
9、步 加工工作中的一个步骤称为作业步。18 3.作业处理步骤作业处理步骤 (1)编辑编辑 建立一个新文件,或对已有的文件中的错误进行修改。(2)编译编译 将源程序翻译成浮动的目标代码。(3)连接连接 主程序和其他所需要的子程序和例行程序连接装配在一起,使之成为一个可执行的、完整的主存映像文件。(4)运行运行 将主存映像文件调入主存,并启动运行,最后得出计算结果。1 4.作业步之间的关系作业步之间的关系 user.c user.obj user.exe 编辑 编译 连接 运行 第一个 第二个 第三个 第四个 作业步 作业步 作业步 作业步 每个作业步运行的结果产生下一个作业步所需要的文件;一个作业
10、步能否正确地执行,依赖于前一个作业步是否成功地完成。1 5.连接类型连接类型 (1)静态连接 一个源程序经编译后,生成一个可重定位的目标模块,并产生内部符号表和外部符号表,供连接程序(Link)使用。内部符号表:本模块可以被其他程序调用的入口点;外部符号表:本模块要调用的外部的程序模块名。1 连接时完成的工作 将各模块连接成为一个整体;构造全程符号表,在其中填写模块的逻辑地址;查找个程序段的外部调用表,填入对应调用函数的地址。静态连接的缺点 静态连接将所需的外部函数链接到目标文件中形成为一个可执行文件。若多个应用程序都调用了同一个库中的外部函数,那么,应用程序的目标文件中都包含了这个外部函数对
11、应的代码。1 (2)动态连接 动态连接不需要将外部函数链接到目标文件中。而是在应用程序中需要调用外部函数的地方作记录,并说明要使用的外部函数名和引用入口号。形成函数调用链表 所需支持 DLL(动态连接库)当 Windows的装载程序将应用程序和DLL装入内存后,装载程序会遍历形成函数调用链表,将DLL中函数在内存的入口(段:偏移)填入链表中的每个结点。23 操 作 系 统24一一.操作系统操作系统用户界面的概念用户界面的概念 1.什么是操作系统的用户界面什么是操作系统的用户界面 操作系统的用户界面(或称接口)是操作系统提供给用户与计算机打交道的外部机制。用户能够借助这种机制和系统提供的手段来控
12、制用户所在的系统。25 2.操作系统提供的用户界面操作系统提供的用户界面 操 作 系 统系统功能调用 操作命令:作业控制语言 键盘命令 图形界面26 2.操作系统提供的用户界面操作系统提供的用户界面 (1)操作界面操作界面(命令接口命令接口)用户使用这个操作界面来组织工作流程和控制程序的运行 (2)系统功能服务界面系统功能服务界面(程序接口程序接口)用户程序在其运行过程中,使用系统功能调用来请求操作系统的服务 (3)操作界面的分类与发展操作界面的分类与发展 作业控制语言 键盘命令 图形化用户界面27二二.操作命令操作命令 1.操作命令与操作系统类型的关系操作命令与操作系统类型的关系 作业控制语
13、言 批处理操作系统 键盘命令 分时操作系统 个人计算机操作系统 图形用户界面 分时操作系统 个人计算机操作系统 实际操作系统实际操作系统:MS-DOS Windows Unix(Linux)提供什么样的用户界面提供什么样的用户界面?28 操作系统提供的用户界面的例子:操作系统提供的用户界面的例子:MS DOS 键盘命令 系统功能调用 Windows 系统 图形用户界面 系统功能调用 unix系统(linux)键盘命令 系统功能调用29 2.作业控制语言作业控制语言 在脱机方式下系统提供作业控制语言(JCL)。(1)什么是作业控制语言什么是作业控制语言 是一种命令语言,包括了对作业处理的命令和资
14、源请求命令。(2)批处理系统中作业的组织批处理系统中作业的组织 作业申请:作业名、需用CPU时间,最迟完成时间、资源请求(主存、外部)等。操作说明书:编译命令、连接命令、运行命令等。程序与数据30 3.键盘命令键盘命令 系统为联机用户(交互作用的用户)提供键盘命令。(1)什么是键盘命令什么是键盘命令 是操作系统为联机用户提供的一种操作命令,用户通过这一组命令直接控制和干预程序的运行。(2)键盘命令的功能键盘命令的功能 分时操作系统 用于注册、通信、注销的各类命令。个人计算机操作系统 用于通信的各类命令。31三三.操作命令的发展操作命令的发展图形用户界面图形用户界面 1.什么是图形化的用户界面什
15、么是图形化的用户界面 图形化用户界面是良好的用户交互界面,它将菜单驱动、图符驱动、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境。(1)菜单驱动方式菜单驱动方式 是面向屏幕的交互方式,它将键盘命令以屏幕方式来体现。命令和系统能完成的操作,用菜单分类分窗口地在屏幕上列出;用户像点菜一样选择命令或某种操作,以控制系统去完成指定的工作。32 菜单系统的类型有多种,如下拉式菜单,上推式菜单和随机弹出式菜单。(2)图符驱动方式图符驱动方式 是一种面向屏幕的图形菜单选择方式。图符图符(Icon)也称图标,是一个小小的图符符号。它代表操作系统中的命令、系统服务、操作功能、各种资源。图形化的命令驱动
16、方式图形化的命令驱动方式:当需要启动系统命令、请求系统资源或操作功能时,可以选择代表它的图符,并借助标记输入设备(鼠标器),采用鼠标器的点击和拖拽功能,完成命令和操作选择及执行。33 (3)图形化用户界面图形化用户界面 是良好的用户交互界面,它将菜单驱动、图符驱动、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境。Microsoft公司的Windows 系统就是这种图形化用户界面的代表。2.图形化的用户界面的特点图形化的用户界面的特点 所有程序以统一的窗口形式出现 提供统一的菜单格式 系统资源、系统命令、操作功能以图标表示 统一的操作方法341.操作系统如何为用户程序提供服务操作系统如
17、何为用户程序提供服务 操作系统提供实现各种功能的例行子程序 应用程序 i 系统调用 中央处理机 存储器 应 用 程 序 外 部 设 备 四四.系统功能调用系统功能调用35 如何调用操作系统服务功能如何调用操作系统服务功能?采用统一的方式 访管指令 访管中断 显示一个字符串打印一个字符串 应用程序 j printf();36 2.访管指令访管指令(自愿进管指令自愿进管指令)svc n svc表示机器访管指令的操作码记忆符 n为地址码(功能号)3.访管中断访管中断 当处理机执行到访管指令时就发生中断,该中断称为访管中断,它表示正在运行的程序对操作系统的某种需求。37 4.什么是系统功能调用什么是系
18、统功能调用 操作系统提供实现各种功能的例行子程序,其中的每一个功能对应访管指令的一个功能号。例如:svc 0 显示一个字符 svc 1 打印一个字符串 系统功能调用是用户在程序一级请求操作系统服务的一种手段,它不是一条简单的硬指令,而是带有一定功能号的“访管指令”。它的功能并非由硬件直接提供,而是由操作系统中的一段程序完成的,即由软件方法实现的。38 5.系统功能调用的实现系统功能调用的实现 a1a0an例行子程序入口地址表A+0A+1A+n 保护现场;取n值;按n值散转;恢复现场;访管中断处理程序 svc n 用户程序+A例行子程序Sub 0Sub 1Sub nSubma0a1anam39
19、1.系统调用的中断指令系统调用的中断指令 Linux系统在初始化阶段中,会调用trap_init()和init_IRQ()两个函数进行中断机制初始化,其中trap_init()是对异常处理、自陷向量的初始化。在arch/i386/kernel/traps.c中定义trap_init()函数。void_init trap_init(void)set_system_gate(SYSCALL_VECTOR,&system_call);在include/asm_i386/nw_irg.h中定义 SYSCALLVECTOR为0 x80五五.Linux系统调用的实现系统调用的实现40 2.选用的系统调用选
20、用的系统调用 sethostname()(1)功能功能 设置计算机(在网络中的)“主机号”;(2)使用使用 int sethostname(const chat*name,size_t len);参数:name:要设置的参数;len:该字符串的长度。返回:成功:0 失败:1 sethostname()是一个库函数,在/usr/lib/libc.a中。实际的系统调用在此函数中发生。41 3.sethostname()的反汇编代码 30 sethostname.0:file forme elf32-i386 31 32 Disassembly of section.text:33 34 00000
21、000 35 0:89 da movl%ebx,%edx 36 2:8b 4c 24 08 movl 0 x8(%esp,1),%ecx 37 6:8b 5c 24 04 movl 0 x4(%esp,1),%ebx 38 a:b8 4a 00 00 00 movl$0 x4a,%eax 39 f:cd 80 int$0 x80 40 11:89 d3 movl%edx,%ebx 45 1e:c3 ret42 3.系统调用系统调用system_call()system_call()代码在arch/i386/kernel/entry.s中 195 ENTRY(system_call)196 pu
22、sh%eax 197 save_ALL 198 GET_CURREN(%ebx)199 CMPL$(nr_syscalls),%eax 200 jae badsys 201 testb$0 x02,tsk_ptrace(%ebx)#PT_TRACESYS 202 jne tracesys 203 call*SYMBOL_NAME(sys_call_table)(,%eax,4)204 movl%eax,EAX(%esp)#save the return value 205 ENTRY(ret_from_sys_call)43 4.系统调用号与系统调用跳转表系统调用号与系统调用跳转表 (1)系统
23、调用号系统调用号 文件include/asm/unistd.h为每个系统调用定义了一个唯一的编号,称为系统调用号。以下为部分编号:8#define_NR_exit 1 9#define_NR_fork 2 10#define_NR_read 3 11#define_NR_write 4 12#define_NR_open 5 13#define_NR_close 6 14#define_NR_waitpid 7 15#define_NR_creat 8 16#define_NR_link 944 (2)系统跳转表系统跳转表 系统跳转表是一个函数指针,跳转时以系统调用号为下标在数组中找到相应的函
24、数指针。该数组在arch/i386/kernel/entry.S中定义为256 entry.S中的数组sys_call_table的汇编代码 425 ENTRY(SYS_CALL_TABLE 426 .long SYMBOL_NAME(sys_ni_syscall)427 .long SYMBOL_NAME(sys_exit)428 .long SYMBOL_NAME(sys_fork)429 .long SYMBOL_NAME(sys_read)430 .long SYMBOL_NAME(sys_write)500 .long SYMBOL_NAME(sys_sethostname)45三三
25、.UNIX的的系统调用系统调用 1.UNIX系统调用的分类系统调用的分类 (1)有关进程管理的系统调用有关进程管理的系统调用 fork 建立一个进程 exec 执行一个文件 wait 等待子进程 exit 进程中止 brk 改变用户数据区大小 sleep 等待一段时间 signal 设置软中断处理程序 kill 发送软中断 alarm 在指定时间后发送软中断 pause 等待软中断 nice 改变进程优先数计算结果 ptrace 跟踪子进程 46 (1)与文件和外设管理有关的系统调用与文件和外设管理有关的系统调用 open 打开文件 close 关闭文件 read 读文件 write 写文件
26、lseek 修改读写指针 creat 建立并打开文件 mknod 建立目录或特别文件 link 联结文件 unlink 删除文件 chdir 改变当前目录 chmod 改变文件属性 pipe 建立并打开管道文件 chown 改变文件主和用户组 mount 安装文件系统(卷)dup 再产生一个文件描述字 umount 拆卸文件系统(卷)47 (3)与系统状态有关的系统调用与系统状态有关的系统调用 getuid 取用户号 setuid 设置用户号 getgid 取用户组号 setgid 设置用户组号 time 取日历时间 stime 设置日历时间 times 取进程执行时间 gtty 读当前终端t
27、ty部分信息 stty 设置当前终端tty部分信息 stat 读取文件状态(i节点)sync 使主存映像与磁盘文件信息一致482.UNIX系统调用的实现系统调用的实现 (1)系统调用的形式 read(fd,buffer,nbytes)在用户程序中的调用:number=read(fd,buffer,nbytes);fd:文件描述符 buffer:读入的内存地址 nbytes:要读入的字节数 number:实际读入的字节数 49 对应的汇编代码:(read=3)(fdr0)sys read;目标代码是104403 buffer;nbytes (返回值存入r0)1 0 0 0 1 0 0 1 0 0
28、 0 0 0 0 1 150 (2)系统调用入口地址表 struct sysent int count;int(*call)();sysent64 count:系统调用自带参数个数 (*call)():函数指针,该系统调用例程的入口地址1表表10.2 系统调用入口地址表系统调用入口地址表编号 自带参数 程序入口地址 系统调用名称 0 0&nullsys indir 1 0&rexit exit 2 0&fork fork 3 2&read read 4 2&write write 63 无定义&nosys 无定义52(3)系统功能调用的实现 保护现场;依dev=6转trap;恢复现场;u.u_aroRo r0;trap总控程序 (read=3)(filesr0)sys read buffers;nbytes;用户程序 参数处理;pc+4;依sysent3转read;trap指令处理程序 参数处理;启动磁盘传送;实际传送字节数u.u_aroRo;read处理程序53 第三章第三章 小结小结 1.作业、作业步的概念 2.运行一个用户程序的过程 3.操作系统提供哪两个接口 4.举例说明实际操作系统的用户界面 5.什么是系统调用,系统调用的实现过程 6.UNIX系统调用的实现过程