操作系统第10章 用户接口.ppt_第1页
操作系统第10章 用户接口.ppt_第2页
操作系统第10章 用户接口.ppt_第3页
操作系统第10章 用户接口.ppt_第4页
操作系统第10章 用户接口.ppt_第5页
已阅读5页,还剩33页未读, 继续免费阅读

下载本文档

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

文档简介

1、第10章 用 户 接 口,任何操作系统管理计算机资源的目的都在于将计算机资源提供给用户使用,用户通过用户接口使用操作系统,用户接口是操作系统的五大功能之一,为用户提供统一的接口是操作系统的目标之一。 用户接口主要分为如下三类: 命令接口 以联机命令方式提供的用户接口。 图形接口 以图形方式提供的用户接口。 程序接口 以程序调用形式提供的用户接口。,10.1 命 令 接 口,10.1.1 命令接口及命令分类 命令接口是用户接口中出现最早和最通用的一种方式,是用户与系统之间交互方式的联机用户接口。命令接口以字符显示方式反馈用户输入的命令信息、命令执行即执行结果信息。对系统的管理和应用都可以通过操作

2、系统提供的命令进行。通常,命令接口中的命令可分为以下几类: 系统管理类; 系统访问类; 磁盘操作类; 文件和目录操作类; 应用类。 1系统管理类 系统管理类命令提供给系统管理员管理系统使用。包括:用户管理、文件系统管理、设备管理、存储资源的管理、网络管理和系统性能的管理等命令。 用户管理命令主要是增加用户、删除用户、维护用户权限等。 文件系统管理命令主要是管理系统目录和用户主目录、控制对目录和文件的访问权限、维护系统软件和文件系统的完整性、完成系统的备份和恢复等的命令。,10.1.1 命令接口及命令分类,设备管理命令主要是管理系统中的输入/输出设备,安装设备、分配和回收设备和卸载设备并对设备进

3、行日常维护的命令。 存储资源管理命令主要用于管理和维护系统内存。 网络管理命令用于管理系统的网络环境、网络服务和网络应用。 系统性能管理命令主要用于跟踪和维护系统处理器的使用情况,调节系统性能,管理进程和线程的运行,处理系统资源竞争和死锁等问题。 2系统访问类 系统访问类命令供普通用户访问系统资源时使用,包括用户登录、用户和用户进程、用户线程之间的通信、用户环境设置、用户目录和用户文件的管理、用户使用各种输入/输出设备等。 3磁盘操作类 磁盘操作类命令主要用于格式化磁盘、对磁盘进行维护和操作等。 4文件和目录操作类 文件和目录操作类命令主要用于创建、复制、修改、更新和删除文件及目录。 5应用类

4、 应用类命令包括运行各种应用类软件相关的命令和运行用户程序相关的命令。 目前,无论是大型计算机系统,还是微机系统,都提供了命令接口。,10.1.2 命令方式,命令可以是命令行方式和批命令方式。 1命令行方式 以行为单位输入和显示不同的命令。每行的长度一般为256个字符,以回车结束命令。 2批命令方式 预先将多个命令组织在一起,并存储到批命令文件中,通过执行批命令文件达到执行批命令文件中的命令的目的,即批处理命令。如MS-DOS的.BAT文件。 在UNIX和Linux操作系统中,命令可以和各种形式参数及语句结合在一起,成为命令文件,从而增强用户接口的处理能力。该命令文件称为命令脚本或shell文

5、件。 命令接口需要用户熟悉命令结构和命令形式。,10.1.3 常用的UNIX命令,UNIX环境中字符的大小写是有区别的。 在UNIX的命令中,命令名与参数之间用空格隔开。 man命令为操作系统提供的联机帮助,对于任何不清楚的命令或系统调用函数,都可使用man获得详细信息。如“man ps”获取ps命令的使用信息。 (1)cd命令改变当前目录 “cd/etc/vsftpd”将当前目录切换到/etc/vsftpd。 “cd .”将当前目录改为上一级目录。 (2)mkdir命令创建目录 “mkdir /home/student/no1”创建一个目录/home/student/no1。 “rmdir”

6、删除目录。 (3)cat命令显示文件内容或合并多个文件的内容 “cat/etc/vsftpd/vsftpd.conf”显示文件/etc/vsftpd/vsftpd.conf的内容。 (4)cp命令复制文件 “cp /etc/vsftpd/vsftpd.conf testcp”把文件/etc/vsftpd/vsftpd.conf复制到当前目录下,并重命名为testcp。,10.1.3 常用的UNIX命令(续),(5)ps命令列出当前系统中进程的信息 “ps ef”列出当前系统中进程的名称及pid等信息。 (6)jobs命令显示当前终端下的所有进程 (7)fg命令将后台进程转换为前台进程 “fg%

7、1”将作业号为1的进程转换为前台进程。 (8)kill命令撤销一个进程 “kill -9 112”撤销进程pid为112的进程。 (9)ls命令显示某个目录及其下的文件属性 “ls /home”显示目录/home下的目录和文件属性。 (10)cal 命令显示日历 (11)Who命令查看用户登录 (12)Whoami命令查看用户自己当前使用的账户名 (13)sort命令排序,10.2 图 形 接 口,图形化用户界面(GUI)是最受用户欢迎的用户接口。对系统的管理和应用, 操作系统提供了图形界面操作。 图形界面是一个丰富的视窗环境,将窗口(window)、图标(icon)、菜单 (menu)和鼠标

8、(pointing device)以及面向对象技术集成在一起,通过各种形 象化的图符将系统的各项功能、文件系统、应用程序进行直观表现,用户可以选择 窗口、菜单、对话框和滚动条完成对窗口内的各种操作,如图10.1所示。,图10.1 Windows系统的窗口,在图形接口中,整个屏幕空间称为桌面。桌面上的常用图标有文档、系统、 回收站、Internet Explorer、时钟等,如图10.2所示。,图10.2 Windows系统的桌面,10.3 程 序 接 口,程序接口是操作系统为程序员编程使用的用户接口,是用户程序取得操作系统服务的唯一方式。 10.3.1 系统调用函数 程序接口由各种类型的系统调

9、用函数组成,满足程序员在程序中使用各种系统资源的需要。通常,一个操作系统的系统调用函数有几十条甚至上百条。不同的操作系统,系统调用函数的名称和格式都不相同。 为了解决系统调用上的差异问题,国际标准化组织ISO给出了基于UNIX的可移植性操作系统接口标准POSIX(Portable Operating System IX)1003.1。 POSIX标准定义了一组过程,这组过程是构成系统调用所必须的。应用程序调用这组过程所提供的服务。应用程序满足POSIX定义的标准应用程序接口(API),便可以在源代码一级上,在多种操作系统上移植运行。 虽然,POSIX规定了系统调用的功能,但是,POSIX并没有

10、指定系统调用的实现形式。 对于操作系统来讲,一方面系统需要保护,系统保护机制防止应用程序直接调用操作系统的过程,避免了操作系统的不安全性。另一方面,应用程序必须能够使用系统的资源和服务。操作系统的系统调用正是系统为应用程序提供的系统资源和服务。因此,应用程序在执行系统调用时,只有运行在操作系统的核心态下,才能执行,但是,应用程序在系统调用结束后应该回到用户态下,继续执行用户程序。 系统调用的类型主要分为两大类。,10.3.1 系统调用函数(续),1进程控制类系统调用 在多进程环境下的进程控制类系统调用包括:创建进程、获取进程属性、进程等待和终止进程等。 2文件操作类系统调用 文件操作类系统调用

11、包括:创建文件、打开文件、关闭文件、删除文件、写文件、读文件、移动文件读写指针、改变文件属性和创建文件目录、删除文件目录等。 10.3.2 UNIX系统中的系统调用 在UNIX操作系统中系统调用主要分为两类:文件系统调用和进程控制系统调用。 1文件系统调用 文件系统调用主要分为以下几类。 creat:创建文件的系统调用。 open:打开文件的系统调用。 close:关闭文件的系统调用。 read:读文件的系统调用。 write:写文件的系统调用。,10.3.2 UNIX系统中的系统调用(续),lseek:读写时文件中定位的系统调用。 stat、fstat、lstat:查询文件状态信息的系统调用

12、。 link/unlink文件的链接/拆链的系统调用。 select:监视文件描述符的系统调用。 fcntl:文件或记录的加锁操作的系统调用。 ioctl:设备特殊文件的系统调用。 dup:拷贝文件描述符的系统调用。 access:检查进程对文件读写权的系统调用。 access、umount:加载和卸载的系统调用。 chmod、chown:改变文件的访问模式和文件拥有者的系统调用。 chroot:改变调用进程使用的根目录的系统调用。 下面是在UNIX操作系统中用文件系统调用实现文件复制的一个实例。 该实例用C语言编写。在该实例中首先打开源文件和目标文件,再从源文件读出文件内容,将文件内容写到目

13、标文件。复制的文件大小为1024。文件大小是可以根据需要改变的。,10.3.2 UNIX系统中的系统调用(续),#include #include #include #include #define resounce_mode 0 #define destination_mode 0774 #define FILESIZE 1024 /* 复制的文件大小 */ int main(int argc,char *argv) int resource_fd,destination_fd; int readbytes,writtenbytes; char bufferFILESIZE, *p; if

14、(argc!= 3) exit(1);,10.3.2 UNIX系统中的系统调用(续),resource_fd = open(argv1, resounce_mode) /* 打开源文件的系统调用 */ if (resource_fd0) exit(2); /* 如果不能打开源文件,则退出 */ destination_fd = creat(argv2, destination_mode ) /* 创建文件系统调用 */ if (destination _fd0) exit(3); /* 如果不能创建目标文件,则退出 */ while (readbytes = read(resource_fd,

15、buffer,FILESIZE) /* 读文件系统调用 */ p = buffer;,10.3.2 UNIX系统中的系统调用(续),if (readbytes = -1) ,10.3.2 UNIX系统中的系统调用(续),2进程控制系统调用 进程控制系统调用如下。 fork:创建新进程的系统调用。 exec:创建新进程的系统调用。 exit:终止当前进程的系统调用。 wait:等待子进程终止,实现父进程与子进程同步的系统调用。 etpid:得到进程标志符的系统调用。 nice:改变进程优先级的系统调用。 brk:允许动态地改变进程数据区大小的系统调用。 (1)创建进程的系统调用 在UNIX系统中

16、,由系统调用fork创建一个新进程。 该系统调用格式为: pid = fork(); 其中pid是创建的进程的标志符。,10.3.2 UNIX系统中的系统调用(续),创建进程的条件是系统有足够的存储资源,创建进程的用户所拥有的进程个数在系统许可的范围内。如果不能满足条件则系统调用返回值pid为-1,表示创建进程失败。 如果系统调用创建进程成功,则新创建的进程赋予一个唯一的进程标志符pid。新创建的进程与创建该进程的进程构成父子进程关系,新创建的进程子进程,可以享有父进程的资源。对父进程返回该进程标志符,对子进程本身,则返回的值为0。 除了fork()创建进程外,系统调用exec也可以创建进程。

17、Exec与fork的区别在于:fork调用成功后,创建的新进程和父进程并发,新进程共享父进程的进程空间;而exec调用成功后,新进程代替父进程并占有父进程的进程空间,父进程不再存在。,10.3.2 UNIX系统中的系统调用(续),(2)结束进程 在UNIX系统中系统调用exit用于进程的自我结束。每个结束后的进程进入僵死状态,除保留进程表项proc结构外,要释放占有的资源(如关闭已经打开的文件),撤除进程上下文(释放内存)。结束进程的系统调用格式为: void exit(status); int status; 其中status是返回给结束进程父进程的参数,为整数。 (3)系统调用wait 用

18、于同步父进程与子进程的终止。调用进程挂起自己等待,直到其子进程因暂停或终止发来软中断信号为止。如果在wait调用之前子进程已经暂停或终止,则调用进程只做一些处理后便返回而不用等待。该系统调用格式为: pid_t wait(status); int * status; 其中status是子进程的退出状态码。,10.3.2 UNIX系统中的系统调用(续),下面是创建进程的C程序代码: #include #include #include int main(int argc,char*argv) int pid; char *prog_argv4; prog_argv0= /bin/ls; prog

19、_argv1= -l; prog_argv2= /; prog_argv3=NULL;,10.3.2 UNIX系统中的系统调用(续),pid=fork(); /* 创建进程 */ if (pid0) /*父进程调用返回子进程的进 程标志符*/,10.3.2 UNIX系统中的系统调用(续),printf(This is parent process).n); if (pid) waitpid(pid,NULL,0); printf(The program end.n); exit(0); ,10.3.2 UNIX系统中的系统调用(续),3进程通信 进程通信中的共享存储区通信方式、消息通信方式和管

20、道通信方式都可以通过系统调用来实现。 (1)管道通信 UNIX操作系统可以利用管道(pipes)实现进程之间的通信。管道通信按照先进先出的原则传送数据。管道的实现采用一个连接写进程和读进程的文件系统中的共享文件作为数据存储,该管道文件又称为pipe文件。写进程将数据写入管道文件,读进程从管道文件中读出数据。管道是一种操作系统的临界资源,所以对管道的应用要考虑进程同步的情况。 UNIX系统中的管道有两种形式。 无名管道(unnamed pipes) 无名管道是一个用系统调用pipe()建立的无名临时文件,只用pipe()返回的文件描述符来标志该文件,因此只有调用pipe()的进程及其子孙进程才能

21、识别此文件描述符,才能利用该管道写读数据。当进程不需要使用无名管道时由核心收回其索引节点。 有名管道(named pipes):有名管道是利用系统调用mknod建立的可以长期存在的有名文件。由于文件具有路径名,其它进程自然知道其存在,也利用该路径来访问该文件。对有名管道的访问与对文件的访问完全相同。用系统调用open()打开、系统调用read()读、系统调用write()写。如果一个进程不使用有名管道时用系统调用unlink()将解除连接。,10.3.2 UNIX系统中的系统调用(续), 无名管道 建立管道 建立管道的系统调用格式为: int pipe(filedes); int fileds

22、2; 其中filedes是文件的描述符,由filedes0和filedes1组成。filedes1是写入管道的描述符,filedes0是从管道读的描述符。 应用程序必须通过文件描述符filedes0和filedes1来访问管道。 管道通信的实质是写文件和读文件。对文件索引节点中的直接地址项访问需要互斥。所以进程要访问前先检查是否上锁,没有上锁才能进入并立即加锁访问,访问完后解锁;如果访问前检查到已经上锁则进程必须睡眠,等待操作进程结束解锁后唤醒。 进程写管道 进程向管道写数据时须注意管道大小限制,管道中已有的数据与要写入数据之和不能大于管道的容量。如果管道中无空间存放要写入的数据时,写进程要睡

23、眠等待读进程将数据读出并将其唤醒后才能写入。,10.3.2 UNIX系统中的系统调用(续),写管道的系统调用格式为: write(filedes1,buf,size); int filedes1,size; char buf; 其中filedes1为写入管道的描述符;buf是要写入管道的数据;size是写入的数据位组长度。 进程读管道 进程从管道读数据时,如果管道中已经有数据,进程则按先进先出的原则通过读指针读取数据,读结束后核心修改索引节点读指针并唤醒写进程;如果进程要读的数据不在管道中,进程则睡眠等待写进程写入数据并将其唤醒。 读管道的系统调用格式为: read(filedes0,buf,

24、size); int filedes1,size; char buf; 其中filedes0为从管道读的描述符;从管道的读出的数据放入buf中;size是读出的数据位组长度。,10.3.2 UNIX系统中的系统调用(续), 有名管道 UNIX的无名管道无法实现不同用户的进程之间的数据通信,而有名管道是利用系统调用mknod建立的可以长期存在的文件,对该管道文件的访问只受文件权限限制而与进程关系无关,所以,有名管道可以用于任意进程之间的通信。 有名管道通过系统调用read和write对该管道文件进行访问,但访问之前必须用系统调用open()打开文件,访问完后用系统调用close()关闭文件。 有

25、名管道的创建 系统调用mknod来建立特殊文件,包括有名管道、设备文件和目录。该系统调用的格式为: mknod(pathname,type and permissions,dev); 其中:pathname是要建立的特殊文件名(有名管道名);type and permission给出特殊文件类型和访问权限;dev为块特殊文件和字符特殊文件规定主设备号和次设备号(此处是有名管道,则dev参数为0)。此处用该系统调用创建一个有名管道,内核为管道文件分配一个索引节点并在索引节点中设置该文件类型是有名管道。,10.3.2 UNIX系统中的系统调用(续),有名管道的打开 有名管道文件有目录并且可通过路径

26、名存取。进程打开有名管道与打开正规文件方式一样,为了表示读写而打开有名管道的进程数目,内核用了文件的索引节点的读计数和写计数。 对有名管道的打开和访问必须采用进程同步。通常情况是系统首先判断有无希望接收的数据的进程,若无则会睡眠等待而不用打开有名管道,有接收数据的进程时才打开管道。 打开的系统调用格式为: int open(path,flags); 该调用返回文件描述符(整数)。其中path为文件名;flags为打开类型,按POSIX标准包括:O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)、O_APPEND、O_CREAT、O_EXCL、O_NOCTTY、O_NONB

27、LOCK、O_TRUNC。 有名管道的读写 在系统调用write期间内核会将数据放在管道设备上,为了加快访问效率只将索引节点的直接地址块作为磁盘块按需要分配给管道,核心则将索引节点的直接地址块作为一个循环队列管理,先进先出。,10.3.2 UNIX系统中的系统调用(续),管道的关闭 关闭管道时内核首先处理读写进程: 如果无写进程、有读进程,内核会唤醒读进程,关闭管道的系统调用空数据返回; 如果有写进程、无读进程,内核会唤醒写进程,并发送一个发生错误的信号给写进程; 除了处理读写进程外,内核还必须释放所有数据块并修改索引节点指明管道为空。 下面是利用无名管道的进程通信C程序: 父进程与子进程通过

28、无名管道通信,父进程将字符串“welcome to named pipe”发送给子进程。由于UNIX操作系统中的无名管道是双向端口,写进程需要关闭读端口,读进程需要关闭写端口。 #include #include #include #include ,10.3.2 UNIX系统中的系统调用(续),main() int filedes2,i,pid; char inbuf256; char string =welcome to named pipe; if (pipe(filedes)0) /* 创建可擦写的无名管道 */ perror(could not create unnamed pipe

29、); exit(1); pid = fork(); if (pid0) perror(could not create subprocess); exit(2); ,10.3.2 UNIX系统中的系统调用(续),if (pid0) /* 父进程*/ close(filedes0); write(filedes1,string,23); printf(the parent process sendedn); wait(0); if (pid=0) /* 子进程*/ memset(inbuf, 0, sizeof(inbuf); close(filedes1); read(filedes0,inb

30、uf,23); printf(the subparent process receivedn); printf(%sn,inbuf); exit(0); ,10.3.2 UNIX系统中的系统调用(续),(2)消息通信 消息是UNIX系统的最早进程通信方式。消息是格式化可变长的信息单元。消息允许一个进程将格式化的数据流发送到其它进程。接收进程可将接收到的多个消息排成消息队列。 消息机制的数据结构 由于进程要发送的消息中既有通信的数据,又有通信的数据管理信息及通信进程之间的信息,因而消息的长度不固定。在UNIX系统消息分为消息首部和消息数据区两部分。消息队列头表管理消息首部。 消息首部:记录有消息

31、类型、消息大小、指向消息数据区指针、消息队列的链接指针等信息。 消息队列头表:该表中每一表项是一个消息队列的消息头,该消息头中记录了该消息队列中第一个消息的指针、最后一个消息的指针、消息队列中消息的数目、队列中消息的总字节数、队列允许的消息数据的最大字节总数、最近一次执行发送操作的时间和进程标志符、最近一次执行接收操作的时间和进程标志符等信息。,10.3.2 UNIX系统中的系统调用(续),消息的数据结构如图10.3所示。,图10.3 消息中的数据结构,10.3.2 UNIX系统中的系统调用(续),消息队列的建立和消息描述符的获取 在UNIX系统中每个消息队列除了用户指定的名字外,为方便用户访

32、问还有一个消息队列描述符。 进程利用系统调用msgget创建消息队列并返回一个指定消息队列的消息描述符。其它进程则用该消息队列描述符访问消息队列。 msgget系统调用格式为 int msgget(key,msgflg); key_t key; int msgflg; 该系统调用返回值是消息描述符,它是搜索消息队列头表表项的索引。其中,key是用户指定的消息队列关键词;msgget是用户设置的标志和访问方式。,10.3.2 UNIX系统中的系统调用(续),消息的发送和接收 进程用msgsnd系统调用发送消息和用msgrcv系统调用接收消息。 系统调用msgsnd的格式为 int msgsnd(

33、msgid,msgp,msgsz,msgflg); int msgid,msgsz,msgflg; struct msgbuf * msgp; 其中,msgid是由msgget返回的消息队列描述符;msgp是指向用户消息缓冲区的指针。在消息缓冲区msgbuf中有消息类型和消息正文 long mtype; /*消息类型* char mtext ; /*消息的正文*/ msgsz是mtext长度的字节数;msgflg规定无内存空间存储消息时,进程是等待还是立即返回。,10.3.2 UNIX系统中的系统调用(续),系统调用msgrcv的格式为 int msgrcv(msgid,msgp,msgsz,msgtpy,msgflg); int msgid,msgsz,msgflg; long msgtpy; struct msgbuf * msgp; 其中,msgid

温馨提示

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

最新文档

评论

0/150

提交评论