操作系统在程序执行过程中的作用 °She进程生成子进程,子进程调用 lexecve系统调用启动加载器,以 装入 Hello程序,最后跳转到第一条指令执行 °在Hlo程序执行过程中,Hll本身不会直接访问键盘、显示器、磁 盘和主存储器等硬件资源,而是依靠OS提供的服务来间接访问。 例如,利用 printf函数最终调出内核服务程序访问硬件。 操作系统是在应用程序和硬件之间插入的一个中间软件层。 °操作系统的两个主要的作用: 硬件资源管理,以达到以下两个目的: 统筹安排和调度硬件资源,以防止硬件资源被用户程序滥用 对于广泛使用的复杂低级设备,为用户程序提供一个简单 致的使用接口 ·为用户(最终用户、用户程序)使用系统提供一个操作接口
操作系统在程序执行过程中的作用 ° Shell进程生成子进程,子进程调用execve系统调用启动加载器,以 装入Hello程序,最后跳转到第一条指令执行 ° 在Hello程序执行过程中,Hello本身不会直接访问键盘、显示器、磁 盘和主存储器等硬件资源,而是依靠OS提供的服务来间接访问。 ° 操作系统是在应用程序和硬件之间插入的一个中间软件层。 ° 操作系统的两个主要的作用: • 硬件资源管理,以达到以下两个目的: - 统筹安排和调度硬件资源,以防止硬件资源被用户程序滥用 - 对于广泛使用的复杂低级设备,为用户程序提供一个简单一 致的使用接口 • 为用户(最终用户、用户程序)使用系统提供一个操作接口 例如,利用printf()函数最终调出内核服务程序访问硬件
O子系统概述 °所有高级语言的运行时( runtime) 都提供了执行I/O功能的机制 用户程序中的10请求(用户空间 例如,C语言中提供了包含像 printf( 丫I0软件 和 scant0等这样的标准/O库函数, 运行时系统 C++语言中提供了如<<(输入)和 >>(输出)这样的重载操作符。 与设备无关的0软件 °从高级语言程序中通过O函数或I/o 内核空间 操作符提出/O请求,到设备响应并完 设备驱动程序 IO软件 成/O请求,涉及到多层次o软件和 I/O硬件的协作。 中断服务程序 °I/O子系统也采用层次结构 IO硬件 从用户I/o软件切换到内核o软件的唯一 办法是“异常”机制:系统调用(自陷)
I/O子系统概述 ° 所有高级语言的运行时(runtime) 都提供了执行I/O功能的机制 例如,C语言中提供了包含像printf() 和scanf()等这样的标准I/O库函数, C++语言中提供了如 <<(输入)和 >>(输出)这样的重载操作符。 ° 从高级语言程序中通过I/O函数或I/O 操作符提出I/O请求,到设备响应并完 成I/O请求,涉及到多层次I/O软件和 I/O硬件的协作。 ° I/O子系统也采用层次结构 从用户I/O软件切换到内核I/O软件的唯一 办法是“异常”机制:系统调用(自陷)
O子系统概述 各类用户的I/o请求需要通过某种方式传给oS: ●最终用户:键盘、鼠标通过操作界面传递给oS ●用户程序:通过函数(高级语言)转换为系统调用传递给oS I/o软件被组织成从高到低的四个层次,层次越低,则越接近设备 而越远离用户程序。这四个层次依次为 (1)用户层o软件(I/O函数调用系统调用) (2)与设备无关的操作系统o软件 (3)设备驱动程序 oS在/O系统 os中极其重要! (4)I/O中断处理程序 大部分o软件都属于操作系统内核态程序,最初的O请求在用 户程序中提出
I/O子系统概述 各类用户的I/O请求需要通过某种方式传给OS: 最终用户:键盘、鼠标通过操作界面传递给OS 用户程序:通过函数(高级语言)转换为系统调用传递给OS I/O软件被组织成从高到低的四个层次,层次越低,则越接近设备 而越远离用户程序。这四个层次依次为: (1) 用户层I/O软件(I/O函数调用系统调用) (2) 与设备无关的操作系统I/O软件 (3) 设备驱动程序 (4) I/O中断处理程序 大部分I/O软件都属于操作系统内核态程序,最初的I/O请求在用 户程序中提出。 OS在I/O系统 OS 中极其重要!
O子系统实例 boskey返回键盘状态的基本函数 °函数原型在bios.h中,完成直接键盘操作 ( stdio.- standard Input是oupu标准输入输出头文件) 原型表示 int bioskey( int cmd 其中cmd有3个参数:0,12 cmd=0, bioskey0返回下一个在键盘键入的值(它将等待到按下一个键)。 它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的 低8位数存放该字符的Asc码;对于特殊键(如方向键、F1~F12等等),低 8位为0,高8位字节存放该键的扫描码。 °cmd=1:当cmd是1, bioskey(査询是否按下一个键,若按下一个键则返回 非零值,否则返回0。 cmd=2:当cmd是2, bioskey0返回 Shift、ctrl、Alt、 Scrolllock、 Numlock、 CapsLock、 Insert键的状态。各键状态存放在返回值的低8位字 节中
°bioskey()返回键盘状态的基本函数 °函数原型在bios.h中,完成直接键盘操作 ( ) °原型表示:int bioskey(int cmd) °其中cmd有3个参数:0,1,2 °cmd= 0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。 它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的 低8位数存放该字符的ASCII码;对于特殊键(如方向键、F1~F12等等),低 8位为0,高8位字节存放该键的扫描码。 °cmd = 1:当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回 非零值,否则返回0。 °cmd = 2:当cmd是2,bioskey()返回Shift、Ctrl、Alt、ScrollLock、 NumLock、CapsLock、Insert键的状态。各键状态存放在返回值的低8位字 节中。 I/O子系统实例
用户ⅣO软件 用户软件可用以下两种方式提出o请求: (1)使用高级语言提供的标准O库函数。例如,在C语言程序中可以直接使 用像 fopen、 fread、 fwrite和 fclose等文件操作函数,或 printf.、putc scan和getc等控制台Io函数。程序移植性很好! 但是,使用标准/O库函数有以下几个方面的不足 (a)标准/o库函数不能保证文件的安全性(无加/解锁机制) (b)所有o都是同步的,程序必须等待o操作完成后才能继续执行 (c)有时不适合甚至无法使用标准/o库函数实现Io功能,如,不提供读取文 件元数据的函数(元数据包括文件大小和文件创建时间等) (d)用它进行网络编程会造成易于出现缓冲区溢出等风险 (2)使用OS提供的AP函数或系统调用。如,在 Windows中直接使用像 Create File、 Readfile、 Write File、 Closehandle等文件操作AP函数,或 Read Console、 Write Console等控制台I/O的API函数。对JUniⅸ或 Linux 用户程序,则直接使用像open、read、 write、 close等系统调用封装函数
用户I/O软件 用户软件可用以下两种方式提出I/O请求: (1)使用高级语言提供的标准I/O库函数。例如,在C语言程序中可以直接使 用像fopen、fread、fwrite和fclose等文件操作函数,或printf、putc、 scanf和getc等控制台I/O函数。 程序移植性很好! 但是,使用标准I/O库函数有以下几个方面的不足: (a) 标准I/O库函数不能保证文件的安全性(无加/解锁机制) (b) 所有I/O都是同步的,程序必须等待I/O操作完成后才能继续执行 (c) 有时不适合甚至无法使用标准I/O库函数实现I/O功能,如,不提供读取文 件元数据的函数(元数据包括文件大小和文件创建时间等) (d) 用它进行网络编程会造成易于出现缓冲区溢出等风险 (2)使用OS提供的API函数或系统调用。如,在Windows中直接使用像 CreateFile、ReadFile、WriteFile、CloseHandle等文件操作API函数,或 ReadConsole、WriteConsole等控制台I/O的API函数。对于Unix或Linux 用户程序,则直接使用像open、read、write、close等系统调用封装函数