1、1第2章 操作系统用户界面2本章重点用户界面类型系统调用32.1 简介用户界面作用使用户方便、有效地使用计算机软、硬件。42.2 一般用户的输入输出界面作业的定义与组织(见第4章)一般用户的输入输出方式(见第9章)52.3 命令控制界面复习操作系统功能之一:提供良好的用户界面用户界面类型操作命令界面(命令控制界面)键盘命令图形界面批处理作业控制语言系统调用界面62.4Linux与Windows的命令控制界面Linux的命令控制界面*(见实验2)Windows的命令控制界面窗口交互命令解释器(cmd.exe)系统信息命令,如 time系统操作命令,如 shutdownShutdown s t 6
2、0(-s表示关机,-t表示延时时间,单位秒)文件系统命令,如 mkdir网络通信命令,如 ipconfigIpconfig -all:显示ip等相关配置信息72.5系统调用定义是操作系统提供给编程人员使用的用户界面。形式语句或函数。使用方式在用户源程序中需要请求系统服务时调用。执行时状态执行时处理机处于核态或管态。重要性是用户程序和内核交互的接口。82.6Linux和Windows的系统调用Linux系统调用的类型1.有关设备管理的系统调用:功能:实现对设备的读写和控制。例:read、write:对指定设备进行读写;open、close:打开和关闭指定的设备。2.有关进程控制的系统调用:功能:
3、例:fork():进程的创建;exit():进程的终止;getpid():获取当前进程的标识符;wait():等待子进程终止、execl():执行某个应用程序。93.有关进程通信的系统调用:功能:例:pipe()实现父子进程通信的管道创建,实现多进程共享消息队列的几个系统调用msgget()、msgsnd()、msgrcv()、msgctl()。4.有关文件管理的系统调用:功能:文件的打开、关闭、读、写、创建、删除、执行、安装、获取等。例:比如我们在C语言中所熟悉的open()、close()、read()、write()等虽是以语句的形式给出,最后调用的是操作系统所提供的系统调用。105关于
4、存储管理的系统调用:关于存储管理的系统调用:功能:对内存空间大小的获取和释放、请求内存缓冲区、检查内存中现有的进程、改变堆栈的大小。例:6关于系统管理的系统调用:关于系统管理的系统调用:功能:设置或读取系统日期和时间的、获得当前用户或主机的标识符等。例:11系统调用的重要性举例(补充)操作命令与系统调用关系C库函数与系统调用关系操作命令与系统调用关系(补充)操作命令在执行后需转换为相应的系统调用函数去完成相应的任务。12C库函数与系统调用关系例:Linux下跟踪标准C库函数printf()的实现步骤一:编写并编译代码代码编写include int main(void)printf(hello
5、world);return 0;编译使用命令gcc-o hello hello.c编译。(将hello.c经过编译的文件以指定的文件名hello保存。)13步骤二:跟踪用命令 strace./hello 跟踪该可执行文件。14结论:库函数由系统调用实现。每一行都和一个系统调用相对应。在输出的末尾,看到write(1,hello world,11)。关于 strace是一个查看程序在干什么的程序,它可以告诉你程序使用了哪些系统调用和这些系统调用的参数,返回值。怎样查看Linux系统调用命令:man 系统调用名称“例:“man write”15在linux系统内核中增加一个新的系统调用函数步骤一:
6、下载内核源代码。在下载的内核中添加系统调用,重新编译内核。步骤二:将新函数代码加入sys.c中步骤三:修改entry.s。在rept之前加入新函数步骤四:修改头文件。将新增加的函数号在unistd.h中申明步骤五:重新编译内核。步骤六:装载新内核。步骤七:重新启动系统。步骤八:测试新增系统调用。16sys.c路径:/usr/src/linux-2.4/kernel/sys.c文件内容:部分系统调用函数,且都以asmlinkage开头,类型都是long,而且在调用的函数名前面加上前缀sys_例:第0号系统调用函数ni_syscall就是asmlinkage long sys_ni_syscall
7、(void)函数,如下所示。asmlinkage long sys_ni_syscall(void)return-ENOSYS;17entry.s路径:/usr/src/linux-2.4/arch/i386/kernel/entry.S文件内容:系统所提供的系统调用的入口表,表中给出了函数名与调用编号之间的对应关系。例:exit()的调用号是1号,fork()是2号,以此类推,如下所示为部分调用号与函数名之间对应的系统调用入口表。ENTRY(sys_call_table).long SYMBOL_NAME(sys_ni_syscall)/*0 old setup()system call*/
8、.long SYMBOL_NAME(sys_exit).long SYMBOL_NAME(sys_fork).long SYMBOL_NAME(sys_read).long SYMBOL_NAME(sys_write).long SYMBOL_NAME(sys_open)/*5*/.long SYMBOL_NAME(sys_close).long SYMBOL_NAME(sys_waitpid).long SYMBOL_NAME(sys_creat)18系统调用与过程(函数)的区别系统调用与子程序调用区别系统调用子程序调用 系统调用的程序是操作系统的程序,其操作是针对系统资源的,执行时处理机处
9、于管态或核态。子程序调用的程序是用户的程序,其操作不涉及系统资源,执行时处理机处于目态。系统调用时会产生中断,并通过中断使CPU的态由目态转换为管态。子程序调用时不会产生中断,CPU的态也不会改变,都是目态。系统调用的命令由操作系统提供。子程序调用命令由所用的语言系统提供。系统调用:一组用于实现各种系统功能的程序段。子程序调用:具有特定功能的和逻辑完整性的程序段。19处理机的态资源占有是否受限问题-内核态与用户态内核态的程序可访问的资源多对代码的可靠性和安全性有严格的要求驻留在内存中例:操作系统用户态的程序可访问的资源受限维护和调试比较简单例:用户程序20态的识别用户态、内核态是处理器的一种状态,通过处理器的状态位来识别处理器的态或通过对处理器状态位的设置来改变处理器的态。如何识别正在运转的程序是内核态程序?程序运行时,处理器态就是程序运行的态。21作业复习