第三章用户界面(一)用户工作环境(二)操作系统的用户界面(三)系统功能调用(四)Linux系统功能调用的实现3.1用户工作环境用户工作环境的形成1.系统要提供各种硬件、软件资源2.设计合理的操作命令3.形成一个可供使用的工作环境将操作系统装入计算机并初始化3.1.1操作系统的引导系统生成在一台裸机上安装操作系统的过程。系统引导(系统初启)把操作系统的必要部分装入主存并使系统进行初始化工作,最终处于命令接收状态。系统引导的方式操作系统的引导有两种方式:独立引导(bootup)(滚雪球)方式辅助下装(download)方式3.1.1操作系统的引导独立引导(bootup)方式:操作系统的核心文件存储在系统本身的存储设备中由系统自己将操作系统核心程序读入内存并运行最后建立一个操作环境适用于微机和大多数系统辅助下装(download)方式:操作系统的主要文件并不放在系统本身的存储设备中,而是在系统启动后,执行下装操作,从另外的计算机系统或者主机系统中将操作系统常驻部分传送到该计算机中,使它形成一个操作环境优点:可以节省较大的存储空间,下装的操作系统也并非是全部程序代码,只是常驻部分或者专用部分,当这部分操作系统出现问题和故障时,可以再请求下装适用于多计算机系统、分布式系统1.打开机器电源;2.ROM中引导程序运行装入系统盘中的主引导块;3.主引导块程序执行,启动DOS7.0引导程序做系统初始化的工作,包括系统资源初始状态的设置、系统主要数据结构初始化、引导图形用户界面程序;4.图形用户界面运行,生成用户的图形用户界面,系统初启工作完成。WINDOWS引导UNIX系统初启1.操作系统执行代码程序装入内存;ROM中引导程序将主引导块装入内存,启动主引导程序运行;主引导程序找到UNIX文件装入内存,并启动初启程序;2.存储空间及其管理机构初始化;3.与设备有关的初始化;4.与文件系统有关的初始化;5.创建0#和1#进程;6.1#进程创建各终端进程;7.终端进程运行shell;8.各用户终端上出现login:表示系统初启完成,等待用户键入命令。功能:将OS读入内存,并将控制权交给OS的初始化程序。LILO、GRUBLILO实例:boot=/dev/hdavga=normalread-onlypromptdefault=dostimeout=30append=hdc=ide-scsiimage=/boot/vmlinuzlabel=linuxroot=/dev/hda2initrd=/boot/initrd•CPU、内存初始化•中断向量表初始化•为进程调度程序做准备•设置基准时钟•内核的内存分配•文件系统初始化•建立init进程3.1.2运行一个用户程序的过程使用计算机解决问题大致分为三个步骤:建立数学模型;选择计算方法;编程序、上机调试。1.作业计算机系统按指定步骤对初始数据进行处理并得到计算结果的加工过程。2.作业步一个作业可划分成若干个部分,每个部分,即加工工作中的一个步骤称为作业步。3.作业处理步骤及关系4.连接类型(1)静态连接源程序经编译后,生成一个可重定位的目标模块,并产生内部符号表和外部符号表,供连接程序(Link)使用。缺点:将所需的外部函数连接到目标文件中形成为一个可执行文件。若多个应用程序都调用了同一个库中的外部函数,则应用程序的目标文件中都包含了这个外部函数对应的代码。(2)动态连接不需要将外部函数连接到目标文件中。而是在应用程序中需要调用外部函数的地方作记录,并说明要使用的外部函数名和引用入口号。DLL(动态链接库)3.2操作系统的用户界面操作系统的用户界面操作系统的用户界面(或称接口)是操作系统提供给用户与计算机打交道的外部机制。用户能够借助这种机制和系统提供的手段来控制用户所在的系统。操作系统(1)操作界面(命令接口)用户组织工作流程和控制程序运行的界面或接口(2)系统功能服务界面(程序接口)用户程序在运行过程中,使用系统功能调用来请求操作系统的服务3.2.1操作系统提供的用户界面1.操作命令与操作系统类型的关系作业控制语言(脱机方式)——批处理操作系统键盘命令、图形用户界面(联机方式)——分时操作系统个人计算机操作系统3.2.2操作命令2.作业控制语言(JCL)一种命令语言,包括作业处理命令和资源请求命令脱机方式下系统提供作业控制语言批处理系统中作业的组成作业申请:作业名、需用CPU时间、最迟完成时间、资源请求(主存、外设)等操作说明书:编辑命令、编译命令、连接命令、运行命令等程序与数据3.键盘命令操作系统为联机用户提供的一种操作命令,用户通过这一组命令直接控制和干预程序的运行系统为联机用户提供键盘命令键盘命令的功能分时操作系统——用于注册、通信、注销的各类命令个人计算机操作系统——用于通信的各类命令分时系统中用户通过键盘直接向系统发布各种命令Windows系统的键盘命令内部命令:系统的命令程序command.com中外部命令:所有可执行文件的文件名.exe(大模式执行文件).com(小模式执行文件).bat(批处理文件)Linux/UNIX系统的键盘命令基本命令:命令的可执行文件均在/bin目录下高级命令:可执行文件名,存放在文件中3.2.3图形化用户界面1.什么是图形化的用户界面图形化用户界面是良好的用户交互界面,它将菜单驱动、图符驱动、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境。(1)菜单驱动方式面向屏幕的交互方式,将键盘命令以屏幕方式来体现命令和系统能完成的操作,用菜单分类分窗口列出用户像点菜一样选择命令或某种操作,以控制系统去完成指定的工作菜单系统的类型有多种,如下拉式菜单、上推式菜单和随机弹出式菜单(2)图符驱动方式一种面向屏幕的图形菜单选择方式图符(Icon)也称图标,是一个小小的图符符号,代表操作系统中的命令、系统服务、操作功能、各种资源图形化的命令驱动方式:当需要启动系统命令、请求系统资源或操作功能时,可以选择代表它的图符,并借助标记输入设备(鼠标),采用鼠标的点击和拖拽功能,完成命令和操作选择及执行(3)图形化用户界面良好的用户交互界面,将菜单驱动、图符驱动、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境。Microsoft公司的Windows系列就是这种图形化用户界面的代表。2.图形化的用户界面的特点所有程序以统一的窗口形式出现提供统一的菜单格式系统资源、系统命令、操作功能以图标表示统一的操作方法系统调用包括:进程和作业管理、文件操作、内存管理、设备管理、信息维护和通信等。应用程序系统调用中央处理机存储器外部设备应用程序3.3系统功能调用用户程序...功能号地址显示打印读文件.........OS的系统调用分支表OS代码显示打印读文件OSINT...............3.3.1操作系统如何为用户程序提供服务?操作系统提供实现各种功能的例行子程序操作系统采用统一的方式:访管指令、访管中断3.3.2如何调用操作系统服务功能?访管指令(自愿进管指令)svcnsvc表示机器访管指令的操作码记忆符n为地址码(功能号)访管中断当处理机执行到访管指令时就发生中断,该中断称为访管中断,表示正在运行的程序对操作系统的某种需求。操作系统提供实现各种功能的例行子程序,其中的每一个功能对应访管指令的一个功能号。例如:svc0显示一个字符svc1打印一个字符串……系统功能调用是用户在程序一级请求操作系统服务的一种手段,它不是一条简单的硬指令,而是带有一定功能号的“访管指令”。它的功能并非由硬件直接提供,而是由操作系统中的一段程序完成,即由软件方法实现。3.3.2如何调用操作系统服务功能?3.3.3系统功能调用的实现mov…int21h用户程序访管中断处理程序保护现场取系统调用号恢复现场…………012n-1中断进入查表调用012n-1系统调用入口地址表中断返回不同的操作系统,系统调用实现的具体方法有所不同,但其实质特点相同:每个系统调用对应一个系统调用号每个系统调用有一个对应的执行程序段每个系统调用要求一定数量的输入参数和返回值整个系统有一个系统调用执行程序入口地址表系统调用的特点系统功能调用vs.库函数在程序设计语言(如C语言)中,往往提供与各系统调用对应的库函数,应用程序可通过对应的库函数来使用系统调用库函数的目的是隐藏访管指令细节,使系统调用更象过程调用,但一般地说,库函数属于用户程序而非系统程序操作系统为用户提供系统调用也出于安全和效率考虑,使得用户态程序不能自由地访问内核关键数据结构或直接访问硬件资源系统服务调用请求UNIX/Linux系统程序、库函数、系统调用的分层关系操作系统(进程管理、存储管理、文件管理、设备管理等)标准库函数(打开、关闭、读、写、创建、撤销等)标准系统程序(实用程序)(汇编、编译、编辑、Shell等)用户用户接口库函数接口系统调用接口硬件(处理器、存储器、磁盘、打印机、终端等)用户态核心态Win32API和UNIX/Linux系统调用粗略对应关系UNIX/LinuxWin32说明forkCreatProcess创建进程waitpidWaitForSingleObject等待进程终止open/closeCreatFile/CloseHandle创建或打开/关闭文件read/writeReadFile/WriteFile读/写文件lseekSetFilePointer移动文件指针mkdir/rmdirCreat/RemoveDirectory建立/删除目录statGetFileAttributesEx获得文件属性系统调用与过程(函数)调用的区别调用形式被调用代码的位置提供方式调用的实现3.4Linux系统调用Linux系统调用由两部分组成:核心函数实现系统调用功能的(内核)代码接口函数提供给应用程序的API,以库函数形式存在Linux的lib.a中Linux系统调用ENTRY(sys-call-table).longsys_restart_syscall/*0-oldsetup(),usedforrestarting*/.longsys_exit.longsys_fork.longsys_read.longsys_write.longsys_open/*5*/.longsys_close....longsys_rt_tgsigqueueinfo/*335*/.longsys_perf_event_open.longsys_recvmmsg系统调用入口表:arch/x86/kernel/syscall_table_32.SLinux系统调用系统调用函数:kernel/sys.c#defineSYSCALL_DEFINE0(name)asmlinkagelongsys_##name(void)SYSCALL_DEFINE1(name,...)SYSCALL_DEFINEx(1,__##name,__VA_ARGS__)__SYSCALL_DEFINEx(x,name,...)asmlinkagelongsys##name(_SC_DECL##x(__VA_ARGS__))SYSCALL_DEFINE1(mycall,unsignedint,number){returnnumber;}asmlinkageintsys_mycall(intnumber){returnnumber;}Linux系统调用系统调用号:arch/x86/include/asm/unistd_32.h/**Thisfilecontainsthesystemcallnumbers.*/#define__NR_restart_syscall0#define__NR_exit1#define__NR_fork2#define__NR_read3#define__NR_write4#define__NR_open5……#define__NR_perf_event_open336#