1、什么是“多道程序设计”技术?它对操作系统的形成起到什么作用?
指在内存同时放若干道程序,使它们在系统中并发执行,共享系统中的各种资源。
作用:操作系统在引入多道程序设计技术后,使得系统具有了多道的特性,宏观上并行,微观上串行的特点。使OS能更好地对计算机进行管理。使计算机的硬件资源得到更充分的利用尤其是CPU,从而提高OS的管理能力
2、什么是“原语”、“特权指令”、“系统调用命令”和“访管指令”?它们之间有无一定的联系?
原语:我们把系统状态下执行的某些具有特定功能的程序,称为原语。
特权指令:指具有特殊权限的指令。这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。
系统调用命令:系统调用是用户程序请求操作系统为其服务的惟一形式,在UNIX中把系统调用称为程序员接口
访管指令:访管指令是一条可以在目态下执行的指令,用户程序中凡是要调用操作系统功能时
就安排一条访管指令。
3、操作系统是如何处理源程序中出现的系统调用命令的?
答:编译程序总是把程序中的系统调用命令改写成一条访管指令和相应的参数。这样在程序实际被执行时,就通过访管指令进入操作系统,达到调用操作系统功能子程序的目的
4、什么是操作系统的基本功能?
处理机管理、存储管理、设备管理、信息管理、作业管理
简述各种作业调度算法
1)先来先服务:按先后顺序进行调度。
(2) 轮转法:让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。
(3)多级反馈队列算法: 轮转算法和优先级算法的综合和发展。
(4) 优先级算法:是多级队列算法的改进,平衡各进程对响应时间的要求。适用于作业调度和
进程调度,可分成抢先式和非抢先式。
(5)短作业优先:又称为短进程优先;这是对FCFS算法的改进,其目标是减少平均周转时间。
(6) 最高响应比优先法:是对FCFS方式和SJF方式的一种综合平衡。
5、信号量上的PV操作只是对信号量的值进行加1或减1操作吗?在信号量上还能够执行除PV操作外的其他操作吗?
根据信号量的定义可知,PV操作并非只是对信号量进行减1或加1操作,更重要的是在减1或加1后,还要判断运算的结果。对于P操作,判定后调用进程自己有可能继续运行,也可能阻塞等待。对于V操作,判定调用进程自己最后总是继续运行,但之前可能会唤醒在信号量队列上等待的进程
6、一个计算机有6台磁带机,有n个进程竞争使用,每个进程最多需要两台。那么n为多少(n<=5)时,系统才不存在死锁的危险?
由于每个进程最多需要两台磁带机,考虑极端情况:每个进程已经都申请了一台。那么只要还有一台空闲,就可以保证所有进程可以完成。也就是说当有条件:n+1=6(即n=5时)系统才不存在死锁的危险
7、列出UCOS-II中实现互斥型信号量管理的所有函数,并且指明每个函数的用途。
OS_EVENT  *OSMutexCreate(INT8U prio ,INT 8U *err);
用途:实现创建互斥型信号量
OS_EVENT  *OSMutexDel(OS_EVENT *pevent ,INT8U  opt ,INT8U *err);
用途:删除mutex;
void  OSMutexPend(OS_EVENT *pevent ,INT16 timeout,INT8U *err)
用途:实现等待一个互斥型信号量(挂起)
INT8U  OSMutexPost(OS_EVENT *pevent)
用途:实现释放一个互斥型的信号量
INT8U  OSMutexAccept(OSEVENT  *pevent ,INT8U *err)
用途:实现检查互斥型信号量,以判断某共享资源是否可以使用;
INT8U OSMutexQuery(OS_EVENT *pevent ,OS_MUTEX_DATA *pdata);
sizeof是什么用途:实现获取某个mutex的信息;
8、举例说明执行shell程序的方法。
1)直接用sh命令执行:
$sh  test.sh
2)使用source命令执行:
$ source  test.sh
  3)将文件改为可执行文件,直接执行
$chmod+x  test.sh
./test.sh
9、什么是系统调用。
Linux内核中设置一组用于实现各种系统功能的子程序,称为系统调用。
10、比较进程与程序的区别
1)进程是动态的,而程序是静态的。
2)进程具有并行特性,而程序没有。
3)进程是竞争计算机系统资源的基本单位,从而其并行性受到系统自己的制约。
4)不同的进程可以包括同一程序,只要该程序所对应的数据集不同。
 
11Linux Socket有几种类型,请列举?
流式Socket SOCK_STREAM)和数据报式SocketSOCK_DGRAM)、原始套接字。
12、进程与线程的区别与联系?
区别:1.进程在执行过程中拥有独立的内存单元,而多个线程共享内存;
2.线程的划分尺度小于进程,使得多线程程序的并发性高
3.独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
联系:进程和线程都是由操作系统所体现的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
13、请列出Linux TCP socket编程的流程?
Client : socket () ->connect()->send()->recv->close()
Server:socket()->bind()->listen()->accept()->recv()->send()->recv->close()
         
14、描述LinuxIPC包含几种进程间通信方式,分别是什么?
、信号量、共享内存、消息队列、
15、进程间如何通过信号量实现同步与互斥。
进程通信中,信号量通过PV操作实现同步与互斥;P操作为S=S-1;表示申请一个资源,V操作为S=S+1;表示释放一个资源。
互斥的实现: 初始化信号量mutex = 1; 当进程进入临界区时执行P操作,退出临界区时执行V操作,从而实现互斥
同步的实现:把信号想象成代表一个消息。当S=0表示消息未产生;当S>0则表示消息已经产生,转换成消费者和生产者的问题 ,从而实现同步
16、列出linux SYSTEM V IPC 中共享内存的主要的四个函数,并且指明每个函数的用途。
int shmget(key_t key, size_t size, int shmflg);
用途:创建一块共享内存
void *shmat(int shmid, void *shmaddr, int shmflg);
用途:shmat调用把参数shmid标识的内存段连到调用进程的一个有效地址上。
int shmdt (void *shmaddr);
把一个共享内存段从进程的逻辑地址空间中分离出来。
int shmctl(int shnqid,int cmd,struct shmid_ds*buf);
用途:实现对共享内存的操作控制
17、简述套接字的历史和发展。
1982 - Berkeley Software Distributions 操作系统引入了sockets 作为本地进程之间通信的接口
1986 - Berkeley 扩展了socket 接口使之支持UNIX 下的TCP/IP 通信
现在很多应用 (FTP, Telnet, etc) 都依赖这一接口
18、说明TCPUDP协议各自的优点和缺点,分别适用于什么应用。
TCP需要先建立连接才能通话同时需要形成三路握手,因此信息传递的可靠性比较高,资源开销加大;UDP不需要以上TCP的两个条件,因此通信效率和实时性要高点,但可靠性不高;
应用:UDP适用于一次只发送少量数据,对可靠性要求不高的应用环境;TCP的应用则相反
19UC/OS-II的所有功能模块实现的功能和提供的API函数名、参数、返回值等
列出UCOS-II中实现信号量管理的所有函数,并且指明每个函数的用途  答:1、OS_EVENT * OSSemCreat  建立信号量,调用OSSemCreate()函数      2、OS_EVENT * OSSemDel  删除信号量      3、 void OSSemPend  任务试图取得设备的使用权      4、INT8U OSSemPost  置位指定的信号量      5、INT16U OSSemAccept  查看设备是否就绪或事件是否发生      6、INT8U OSSemQuery  获取某个信号量的信息
20Linux中进程管理(Fork调用、exec调用)、文件、设备管理、内存管理、进程间通信机制(IPC)涉及到的系统调用和讲过或安排做过的程序等
21Linux Shell程序设计中讲过或者安排完成的程序。
其中重点:
22、一个Linux程序,打开一个文本文件,并从该文件中读出一段数据(49
os\PART_III\unix_p\exam06\v2
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#define BUFFERSIZE 128
int main(int argc,char **argv)
{
    int from_fd;
    size_t size_read;
    char buffer[BUFFERSIZE];
       
    if((from_fd=open("./",O_RDONLY))==-1)
    {
        printf("arguments 1 wrong!\n  exit!\n");
        exit(0);       
    }
   
    size_read=read(from_fd,buffer,BUFFERSIZE);
    if(size_read>0)
    printf("content of the file:%s",buffer);
    close(from_fd);
    exit(0);
}
23、在UCOS-II中有一个程序,需要一个任务专门管理一个消息队列,为其它任务提供打印服务,其它任务当需要在屏幕上打印字符串时往消息队列中发送消息,而本任务则等待消息队列中的消息,当有消息时取出并打印其包含的消息内容,如无消息则等待(阻塞)
(消息队列的程序)
24、使用流式Socket的简单应用,它包括客户和服务器两个程序。服务器在某个端口进行监听。当客户同服务器建立连接后,服务器以发送回字符串“Hello! Are You Fine”作为响应。然后,客户程序结束运行,服务器继续进行监听。(169