- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统与实验教程 第1章1 * 第2章 操作系统用户界面 * 本章重点 用户界面类型 系统调用 * 2.1 简介 用户界面作用 使用户方便、有效地使用计算机软、硬件。 * 2.2 一般用户的输入输出界面 作业的定义与组织(见第4章) 一般用户的输入输出方式(见第9章) * 2.3 命令控制界面 复习 操作系统功能之一:提供良好的用户界面 用户界面类型 操作命令界面(命令控制界面) 键盘命令 图形界面 批处理作业控制语言 系统调用界面 * 2.4Linux与Windows的命令控制界面 Linux的命令控制界面*(见实验2) Windows的命令控制界面 窗口交互 命令解释器(cmd.exe) 系统信息命令,如 time 系统操作命令,如 shutdown Shutdown –s –t 60(-s表示关机,-t表示延时时间,单位秒) 文件系统命令,如 mkdir 网络通信命令,如 ipconfig Ipconfig -all :显示ip等相关配置信息 * 2.5系统调用 定义 是操作系统提供给编程人员使用的用户界面。 形式 语句或函数。 使用方式 在用户源程序中需要请求系统服务时调用。 执行时状态 执行时处理机处于核态或管态。 重要性 是用户程序和内核交互的接口。 * 2.6Linux和Windows的系统调用 Linux系统调用的类型 有关设备管理的系统调用: 功能:实现对设备的读写和控制。 例:read、write:对指定设备进行读写;open、close:打开和关闭指定的设备。 有关进程控制的系统调用: 功能: 例: fork():进程的创建; exit():进程的终止; getpid():获取当前进程的标识符; wait():等待子进程终止、 execl():执行某个应用程序。 * 有关进程通信的系统调用: 功能: 例: pipe()实现父子进程通信的管道创建,实现多进程共享消息队列的几个系统调用msgget()、msgsnd()、msgrcv()、msgctl() 。 有关文件管理的系统调用: 功能:文件的打开、关闭、读、写、创建、删除、执行、安装、获取等。 例:比如我们在C语言中所熟悉的open()、close()、read()、write()等虽是以语句的形式给出,最后调用的是操作系统所提供的系统调用。 * 5.关于存储管理的系统调用: 功能:对内存空间大小的获取和释放、请求内存缓冲区、检查内存中现有的进程、改变堆栈的大小。 例: 6.关于系统管理的系统调用: 功能:设置或读取系统日期和时间的、获得当前用户或主机的标识符等。 例: * 系统调用的重要性举例(补充) 操作命令与系统调用关系 C库函数与系统调用关系 操作命令与系统调用关系(补充) 操作命令在执行后需转换为相应的系统调用函数去完成相应的任务。 * C库函数与系统调用关系 例:Linux下跟踪标准C库函数printf()的实现 步骤一:编写并编译代码 代码编写 #include stdio.hint main(void) { printf(hello world); return 0; } 编译 使用命令gcc -o hello hello.c编译。(将hello.c经过编译的文件以指定的文件名hello保存。) * 步骤二:跟踪 用命令 strace ./hello 跟踪该可执行文件。 * 结论: 库函数由系统调用实现。 每一行都和一个系统调用相对应。 在输出的末尾,看到write(1, hello world, 11)。 关于 strace 是一个查看程序在干什么的程序,它可以告诉你程序使用了哪些系统调用和这些系统调用的参数,返回值。 怎样查看Linux系统调用 命令:man 系统调用名称“ 例:“man write” * 在linux系统内核中增加一个新的系统调用函数 步骤一:下载内核源代码。在下载的内核中添加系统调用,重新编译内核。 步骤二:将新函数代码加入sys.c中 步骤三:修改entry.s。在rept之前加入新函数 步骤四:修改头文件。将新增加的函数号在unistd.h中申明 步骤五:重新编译内核。 步骤六:装载新内核。 步骤七:重新启动系统。 步骤八:测试新增系统调用。 * sys.c 路径:/usr/src/linux-2.4/kernel/sys.c 文件内容:部分系统调用函数,且都以asmlinkage开头,类型都是long,而且在调用的函数名前面加上前缀sys_ 例:第0号系统调用函数ni_syscall就是asmlinkage long sys_ni_syscall(void)函数,如下所示。 asmlinkage long sys_ni_syscall(void)
文档评论(0)