第3章 用户接口_第1页
第3章 用户接口_第2页
第3章 用户接口_第3页
第3章 用户接口_第4页
第3章 用户接口_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章操作系统的用户接口操作系统的用户接口用户工作环境运行一个应用程序的过程操作系统用户界面系统功能调用Linux系统功能调用1操作系统的用户接口——主要内容用户工作环境操作系统的用户接口——用户工作环境2用户身份合法性检查用户工作区:操作命令语言操作系统的用户接口——用户工作环境1.如何形成用户工作环境(1)系统提供各种硬件、软件资源(2)设计并提供使用方便的命令集合(3)将OS装入计算机并初始化,形成可供使用的工作环境2.两种形式的用户工作环境(1)交互工作环境(2)批量工作环境作业控制语言3将操作系统的必要部分装入主存并对系统进行初始化工作,最终使系统处于命令接收状态。操作系统的用户接口——用户工作环境3.系统生成(1)系统生成是指在一台裸机上(或者安装新的操作系统)安装操作系统的过程。(2)一般情况下,系统生成的工作是由系统程序员来完成的,在系统生成的过程中涉及到机器的硬件配置和操作系统核心参数的设置。还涉及软件系统的版权的问题(3)在微机上的系统生成是用户自己完成的,比如安装WINDOWS98、LINUX、MINIX、UNIX。4.操作系统的初启(1)系统引导的任务4OS核心文件存储在系统本身的存储设备中,由系统自己将OS核心程序读入主存并运行,建立一个操作环境。适用于微机和大多数系统OS主要文件不放在系统本身的存储设备中,在系统启动后执行下装操作,从另外的计算机系统中将操作系统常驻部分传送到该计算机中,使它形成一个操作环境。适用于多计算机系统、由主控机与前端机构成的系统以及分布式系统。①现场独立引导方式(滚雪球方式、bootup)

②辅助下装方式

(download)(2)系统引导的方式操作系统的用户接口——用户工作环境5①初始引导系统加电,执行系统初启程序。(该程序存在非易失内存中的指定位置。PC:0xffff:0000);初启程序对系统硬件和配置进行自检,保证系统没有硬件错误;从硬盘中读入操作系统引导程序,并将控制权交给该程序模块。0X7C00(3)独立引导方式(滚雪球方式)的过程操作系统的用户接口——用户工作环境6主引导块

磁盘的第一个物理块。512byte的程序和数据,确定活动磁盘分区。这一部分代码也可以是只负责装入引导装入程序(如lilo),再由后者装入OS。引导块

每个逻辑磁盘的第一个物理块。②引导程序执行引导程序执行,将操作系统核心文件读入内存,并将控制交给核心的初始化程序。

操作系统引导程序操作系统的用户接口——用户工作环境7③核心初始化

初始化系统数据结构及参数系统加电建立进程有关的数据结构;获得自由存储空间的容量,建立存储管理的数据结构

;建立系统设备和文件系统的数据结构;初始化时钟。④系统初始化完善OS的操作环境,装载命令处理程序(或图形用户界面),并初始化;在多用户系统中,为每个终端建立命令解释进程,使系统处于命令接收状态。操作系统的用户接口——用户工作环境8ROMBIOS自检运行装入系统盘中的主引导块装入活动OS引导块装入OSOS初始化形成用户界面(4)PC初启操作系统的用户接口——用户工作环境9BIOS引导程序主引导块IO.SYS(I/O初始化)DOS.SYS(文件系统,简单内存初始化)COMMAND.COM(简单任务管理)C:\>(5)DOS启动操作系统的用户接口——用户工作环境10Linux系统是以滚雪球的方式启动加电或复位→BIOS的启动→BootLoader→OS初始化①系统加电或复位上电自检;对硬件设备进行检测和连接,并将测得的数据送入BIOS数据区;对主存中所有的数据清零,对内存进行校验,若无错,BIOS入口→CS:IP。(6)Linux系统初启操作系统的用户接口——用户工作环境11②BIOS启动

在ROM中的引导程序放在固定位置:FFFF:0000CPU从这里开始执行。从盘中读入BootLoader(引导程序)。从硬盘启动时,读入零柱面零磁道1扇区MBR(MasterBootRecord),将控制权交BootLoader。③Loader(引导程序)功能:将OS读入内存,并将控制权交给OS的初始化程序。grub/lilo等操作系统的用户接口——用户工作环境12④系统核心初始化(Setup.s)

Setup的工作检查调入内存中的代码;获取内存容量信息,设置设备模式;屏蔽中断,准备进入保护模式;设置中断描述符表(idt),全局描述符表(gdt);控制权交给Heads。Heads的工作对中断向量表作准备工作;检查CPU类型;调用Setup_paging进行页面初始化;调用main.c中的Start_kernel()。操作系统的用户接口——用户工作环境13Start_kernel()的工作对与CPU、内存等最基本硬件相关部分进行初始化;对中断向量表进行初始化;为进程调度程序作准备;设置基准时钟;内核的内存分配;对文件系统进行初始化;建立init进程。init进程对每一个联机终端建立“getty”进程,getty在终端上显示“login”,等待用户登录。操作系统的用户接口——用户工作环境应用程序的处理操作系统的用户接口——应用程序的处理141.作业、作业步

(1)作业计算机系统按指定步骤对初始数据进行处理并得到计算结果的加工工作。

(2)作业步加工工作中的一个步骤称为作业步。操作系统的用户接口——应用程序的处理152.处理应用程序的步骤

(1)编辑建立一个新文件,或对已有的文件中的错误进行修改。

(2)编译将源程序翻译成浮动的目标代码。操作系统的用户接口——应用程序的处理(3)连接主程序和其他所需要的子程序和例行程序连接装配在一起,使之成为一个可执行的、完整的主存映像文件。(4)运行将主存映像文件调入主存,启动运行,得出计算结果。16编译器或汇编器目标模块源程序其他目标模块主存中运行动态装入的系统库编译时间连接装配时间动态链接加载运行时间连接装配程序主存映像文件应用程序处理步骤示意图应用程序处理步骤操作系统的用户接口——应用程序的处理172.连接类型(1)静态连接一个源程序经编译后,生成一个可重定位的目标模块,并产生内部符号表和外部符号表,供连接程序(Link)使用。①内部符号表本模块可以被其他程序调用的入口点。②外部调用表本模块要调用的外部的程序模块名。操作系统的用户接口——应用程序的处理18③连接需要做的工作将各模块连接成为一个整体;构造全程符号表,在其中填写模块的逻辑地址;查找各程序段的外部调用表,填入对应调用函数的地址。④静态连接的缺点静态连接将所需的外部函数链接到目标文件中形成为一个可执行文件。若多个应用程序都调用了同一个库中的外部函数,那么,多个应用程序的目标文件中都会包含这个外部函数对应的代码。操作系统的用户接口——应用程序的处理19(2)动态连接

动态连接不需要将外部函数链接到目标文件中。而是在应用程序中需要调用外部函数的地方作记录,并说明要使用的外部函数名和引用入口号。————形成函数调用链表

所需支持——DLL(动态链接库)当Windows的装载程序将应用程序和DLL装入主存后,装载程序会遍历函数调用链表,将DLL中函数在主存的入口(段:偏移)填入链表中的每个结点。操作系统的用户接口——应用程序的处理用户接口操作系统的用户接口——用户接口201.什么是操作系统的用户界面操作系统的用户界面(或称接口)是操作系统提供给用户与计算机打交道的外部机制。用户能够借助这种机制和系统提供的手段来控制用户所在的系统。

操作系统的用户接口——用户接口

操作系统用户通过操作系统使用计算机示意图212.操作系统提供的用户界面(1)操作界面(命令接口)用户使用操作界面来组织工作流程和控制程序的运行。

(2)

系统功能服务界面(程序接口)用户程序在其运行过程中,使用系统功能调用来请求操作系统的服务。

操作命令:

作业控制语言键盘命令图形界面

操作系统系统功能调用操作系统提供的用户接口示意图操作系统的用户接口——用户接口223.操作命令与操作系统类型的关系(1)作业控制语言──

批处理操作系统(2)键盘命令──

分时操作系统

个人计算机操作系统(3)图形用户界面──

分时操作系统

个人计算机操作系统

实际操作系统:MS-DOSWindowsLinux(UNIX)提供什么样的用户界面?操作系统的用户接口——用户接口234.实例操作系统提供的用户界面

(1)MS-DOS──

键盘命令系统功能调用

(2)Windows

──

图形用户界面系统功能调用

(3)Linux(UNIX)─

键盘命令(XWindow)系统功能调用操作系统的用户接口——用户接口系统功能调用操作系统的用户接口——系统功能调用241.什么是系统功能调用(1)操作如何为用户提供服务

操作系统提供实现各种功能的例行子程序。应用程序i

系统调用

中央处理机存储器外部设备应用程序计算机系统部件系统功能调用示意图操作系统的用户接口——系统功能调用25(2)如何调用操作服务功能

①采用统一进管方式——

系统提供访管指令、访管中断

显示一个字符串读文件

应用程序j

read();

操作系统统功能模块②访管指令(自愿进管指令)

svcn

svc表示机器访管指令的操作码记忆符,n为地址码(功能号)系统功能调用示意图操作系统的用户接口——系统功能调用26③访管中断

当处理机执行到访管指令时发生中断,该中断称为访管中断,它表示正在运行的程序对操作系统的某种需求。

操作系统提供实现各种功能的例行子程序,其中的每一个功能对应访管指令的一个功能号。例如:

svc0显示一个字符

svc1打印一个字符串

(3)什么是系统功能调用系统功能调用是用户在程序一级请求操作系统服务的一种手段,它是带有一定功能号的“访管指令”。其功能是由操作系统中的程序完成的,即由软件方法实现的。操作系统的用户接口——系统功能调用274.系统调用的实现

a1a0┇ai例行子程序入口地址表A+0A+1┇A+i保护现场;取i值;按i值转移;

恢复现场;访管中断处理程序

svci

用户程序+ASubmam例行子程序Sub0Sub1Subi┇a0a1ai┇系统调用的执行过程操作系统的用户接口——系统功能调用操作系统的用户接口——系统功能调用(1)实现系统调用必须完成的工作

编写各服务功能的例行子程序访管中断处理程序:保护现场、调用例行子程序、恢复现场构造例行子程序的入口地址表

:功能号与例行服务子程序一一对应。用户程序中安排访管指令

:intn

(2)参数传递问题由陷入指令自带参数:陷入指令的长度有限,且还要携带系统调用功能号,只能自带有限的参数通过有关通用寄存器来传递参数:这些寄存器应是系统程序和用户程序都能访问的,由于寄存器个数限制,无法传递较多的参数在内存中开辟专用堆栈区来传递参数28操作系统的用户接口——系统功能调用(3)系统调用与一般过程调用的区别

系统调用方式(INT)与程序中一般的调用方式的相同点改变指令流程重复执行和公用改变指令流程后需要返回原处系统调用方式(INT)与程序中一般的调用方式的不同点运行在不同的系统状态 过程调用:调用前后状态相同,用户态或核态 系统调用:INT指令,用户态→核态返回问题

过程调用:正常返回调用过程 系统调用:可能引起进程调度系统调用命令中,同一程序中不包含被调用代码:好处?系统调用涉及到PSW:状态管理、标志寄存器29操作系统的用户接口——系统功能调用(4)系统调用与库函数

系统调用代码属于OS,库函数由软件开发商提供,由编译工具链入用户程序。系统调用代码的执行引起CPU状态的变化:用户态核心态库函数的执行不会引起CPU状态的变化:用户态30Linux的系统功能调用Linux系统——Linux系统功能调用311.Linux系统功能调用的过程在Linux系统中,系统调用通过异常类型实现;当执行了int0x80指令而发生的软件中断;系统自动将用户态切换为核心态来处理该事件,执行自陷处理程序(系统调用处理程序)。Linux系统——Linux系统功能调用32(1)系统功能调用过程abc();

abc();

{syscall;

}system_call:sys_abc

SYSEXITsysabc(){

}用户态核心态用户程序系统调用

在libc标准库中的封装例程系统调用处理程序系统调用服务例程Linux系统调用过程Linux系统——Linux系统功能调用33(2)例:getuid系统调用过程intmain(){getuid();

}intgetuid(void)

{long_res;int$0x80;

}ENTRY(system_call)pushl%esxSAVE_ALLGET_CURRENT(%ebx)

callsys_getuid16

RESTORE_ALLasmlinkagelongsys_getuid16(void){returnhigh2lowuid(current_uid);}用户程序系统调用处理程序标准C库内核例程getuid系统调用过程Linux系统——Linux系统功能调用例:sethostname函数原型:

sethostname(constchar*name,size_tlen);功能:设置计算机的主机名。参数:

name:主机名

len:name字符串的长度

返回:0,成功;-1,失败。

副作用34用户空间调用情况

sethostname是libc库中的一个库函数,实际的系统调用在该函数中发出。libc.a反汇编35进入函数sethostname后堆栈指针%esp情况:指向返回地址%esp+8:参数name %esp+4:参数len0x4a:sethostname的系统调用号36系统内核情况

通过寄存器传送参数

INT80执行时引出中断处理程序system_call();

代码在arch/i386/kernel/entry.S中37

ENTRY(system_call) pushl%eax#saveorig_eax系统调用号进堆栈 SAVE_ALL #保留现场 GET_CURRENT(%ebx)#%ebx指向当前PCB testb$0x02,tsk_ptrace(%ebx)#检查标志位 jnetracesys cmpl$(NR_syscalls),%eax #功能号是否合法? jaebadsys callSYMBOL_NAME(sys_call_table)(,%eax,4) #调用跳转表中相应函数 movl%eax,EAX(%esp)#savethereturnvalue38392.Linux系统功能调用的实现机制(1)Linux系统调用的进入 ①Linux系统的软中断指令是int0x80汇编语言指令②该指令的执行会发生中断③处理机的状态由用户态自陷到内核态④从system_call()开始执行系统调用处理程序。⑤当系统调用处理完毕后,通过iret汇编语言指令返回到用户态。Linux系统——Linux系统功能调用40(2)系统调用号 ①linux中,每个系统调用被赋予一个唯一的系统调用号

②系统调用号定义在include/asm-i386/unistd.h头文件中

③系统调用号格式如下

#define__NR_restart_syscall0#define__NR_exit 1#define__NR_fork 2#define__NR_read 3#define__NR_write 4#define__NR_open 5……………………#define__NR_mq_getsetattr282

Linux系统——Linux系统功能调用41(3)系统调用表 ①

系统调用表记录了内核中所有已注册过的系统调用,它是系统调用的跳转表。

系统调用表是一个函数指针数组,表中依次保存所有系统调用的函数指针③

Linux系统调用表保存在arch/i386/kernel/下的entry.S中或arch/x86/kernel/syscall_table_32.s中Linux系统——Linux系统功能调用42④

系统调用表格式如下

ENTRY(sys_call_table) .longsys_restart_syscall/*0*/ .longsys_exit/*1*/ .longsys_fork /*2*/ .longsys_read /*3*/ .longsys_write /*4*/ .longsys_open /*5*/…………………… .longsys_mq_getsetattr/*282*/Linux系统——Linux系统功能调用43(4)系统调用处理程序

系统调用处理程序是system_call(),主要工作如下宏SAVE_ALL保护现场;正确性检查;依eax中所包含的系统调用号,调用其对应的服务例程;系统服务例程结束时,通过宏RESTORE_ALL恢复寄存器;最后通过iret指令返回。Linux系统——Linux系统功能调用443.增加一个新的系统功能调用的方法(1)添加新的服务例程

在/usr/src/linux/kernel/sys.c文件中增加一个新的函数,该函数的名字是sys_mysyscall②例:一个简单的系统调用,其功能是返回一个整型值asmlinkageintsys_mycall(intnumber){returnnumber;}Linux系统——Linux系统功能调用45(2)增加新的系统功能调用号

①在文件include/asm-i386/unistd.h中添加一项#define__NR_mysyscallXX②XX为新增加的系统调用号,此数字选一未用值。③例#define__NR_restart_syscall0#define__NR_exit 1……………………#define__NR_mq_ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论