复习要点答案Word下载.docx
《复习要点答案Word下载.docx》由会员分享,可在线阅读,更多相关《复习要点答案Word下载.docx(7页珍藏版)》请在冰豆网上搜索。
![复习要点答案Word下载.docx](https://file1.bdocx.com/fileroot1/2022-11/23/1ed65b43-ae94-4b09-9146-996cde3d48ec/1ed65b43-ae94-4b09-9146-996cde3d48ec1.gif)
进程同步,作业调度,内存管理,文件管理。
硬件资源分配
信号量上的P、V操作只是对信号量的值进行加1或减1操作吗?
在信号量上还能够执行除P、V操作外的其他操作吗?
一个计算机有6台磁带机,有n个进程竞争使用,每个进程最多需要两台。
那么n为多少(n<
=5)时,系统才不存在死锁的危险?
n*(x-1)+1<
=m
n:
进程数
x:
最多使用的资源数
m:
资源总数
列出UCOS-II中实现互斥型信号量管理的所有函数,并且指明每个函数的用途。
OS_EVENT*OSMutexCreate(INT8Uprio,INT8U*err);
用途:
实现创建互斥型信号量
OS_EVENT*OSMutexDel(OS_EVENT*pevent,INT8Uopt,INT8U*err);
删除mutex;
voidOSMutexPend(OS_EVENT*pevent,INT16timeout,INT8U*err)
实现等待一个互斥型信号量
INT8UOSMutexPost(OS_EVENT*pevent)
实现释放一个互斥型的信号量
INT8UOSMutexAccept(OSEVENT*pevent,INT8U*err)
实现检查互斥型信号量,以判断某共享资源是否可以使用;
INT8UOSMutexQuery(OS_EVENT*pevent,OS_MUTEX_DATA*pdata);
实现获取某个mutex的信息;
举例说明执行shell程序的方法。
直接用sh命令执行:
$shtest.sh
使用source命令执行:
$sourcetest.sh
将文件改为可执行文件,直接执行
$chmod+xtest.sh
./test.sh
什么是系统调用。
所谓系统调用就是系统内核提供的、功能强大的一系列得函数,系统调用是在内核中实现的,把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序
比较进程与程序的区别
(1)进程是动态的,而程序是静态的。
(2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。
没有建立进程的程序不能作为1个独立单位得到操作系统的认可。
(3)1个程序可以对应多个进程,但1个进程只能对应1个程序。
进程和程序的关系犹如演出和剧本的关系。
LinuxSocket有几种类型,请列举?
流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。
进程与线程的区别与联系?
区别:
1.进程在执行过程中拥有独立的内存单元,而多个线程共享内存;
2.线程的划分尺度小于进程,使得多线程程序的并发性高
3.独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
联系:
进程和线程都是由操作系统所体现的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
请列出LinuxTCPsocket编程的流程?
Client:
socket()->
connect()->
send()->
recv->
close()
Server:
socket()->
bind()->
listen()->
accept()->
recv()->
描述Linux中IPC包含几种进程间通信方式,分别是什么?
信号量共享内存消息队列
进程间如何通过信号量实现同步与互斥。
进程通信中,信号量通过PV操作实现同步与互斥;
P操作为S=S-1;
表示申请一个资源,V操作为S=S+1;
表示释放一个资源。
互斥的实现:
初始化信号量mutex=1;
当进程进入临界区时执行P操作,退出临界区时执行V操作,从而实现互斥
同步的实现:
把信号想象成代表一个消息。
当S=0表示消息未产生;
当S>
0则表示消息已经产生,转换成消费者和生产者的问题,从而实现同步
列出linuxSYSTEMVIPC中共享内存的主要的四个函数,并且指明每个函数的用途。
intshmget(key_tkey,size_tsize,intshmflg);
创建一块共享内存
void*shmat(intshmid,void*shmaddr,intshmflg);
shmat调用把参数shmid标识的内存段连到调用进程的一个有效地址上。
intshmdt(void*shmaddr);
实现对共享内存的操作控制
简述套接字的历史和发展。
1982-BerkeleySoftwareDistributions操作系统引入了sockets作为本地进程之间通信的接口
1986-Berkeley扩展了socket接口使之支持UNIX下的TCP/IP通信
现在很多应用(FTP,Telnet,etc)都依赖这一接口
说明TCP与UDP协议各自的优点和缺点,分别适用于什么应用。
tcp需要先建立连接才能通话同时需要形成三路握手,因此信息传递的可靠性比较高,资源开销加大;
UDP不需要以上TCP的两个条件,因此通信效率和实时性要高点,但可靠性不高;
应用:
UDP适用于一次只发送少量数据,对可靠性要求不高的应用环境;
TCP的应用则相反
UC/OS-II的所有功能模块实现的功能和提供的API函数名、参数、返回值等
Linux中进程管理(Fork调用、exec调用)、文件、设备管理、内存管理、进程间通信机制(IPC)涉及到的系统调用和讲过或安排做过的程序等
LinuxShell程序设计中讲过或者安排完成的程序。
其中重点:
一个Linux程序,打开一个文本文件,并从该文件中读出一段数据
os\PART_III\unix_p\exam06\v2
#include<
unistd.h>
fcntl.h>
stdio.h>
sys/types.h>
sys/stat.h>
errno.h>
string.h>
#defineBUFFERSIZE128
intmain(intargc,char**argv)
{
intfrom_fd;
size_tsize_read;
charbuffer[BUFFERSIZE];
if((from_fd=open("
./rpm.txt"
O_RDONLY))==-1)
{
printf("
arguments1wrong!
\nexit!
\n"
);
exit(0);
}
size_read=read(from_fd,buffer,BUFFERSIZE);
if(size_read>
0)
printf("
contentofthefile:
%s"
buffer);
close(from_fd);
exit(0);
}
在UCOS-II中有一个程序,需要一个任务专门管理一个消息队列,为其它任务提供打印服务,其它任务当需要在屏幕上打印字符串时往消息队列中发送消息,而本任务则等待消息队列中的消息,当有消息时取出并打印其包含的消息内容,如无消息则等待(阻塞)
无
使用流式Socket的简单应用,它包括客户和服务器两个程序。
服务器在某个端口进行监听。
当客户同服务器建立连接后,服务器以发送回字符串“Hello!
AreYouFine”作为响应。
然后,客户程序结束运行,服务器继续进行监听。
os\网络编程\PROGRAM\exam01
在UCOS-II中有一个程序,有两个任务,通过消息邮箱进行通信,优先级为5的任务每隔500毫秒往邮箱中发一个消息,然后通过延时函数进入等待状态,优先级为8的任务等待邮箱中的消息,如果邮箱中没有消息则阻塞,获取了邮箱中的消息后,将消息的内容进行显示。
os\PART_I\SOURCE\OSMbox例子
在Linux下,一个进程创建子进程的代码
\PART_III\unix_p\exam04
#include<
pid_tchild;
Iamtheparentprocess:
%ld\n"
getpid());
if((child=fork())==-1)
Forkerror\n"
elseif(child==0)
Iamthechildprocess:
sleep
(2);
execl("
/home/yangzl/unixC_p/for_exam04/main"
NULL);
execliswrong!
else
Parentprocessagain!
!
wait(NULL);
Parentprocessagainandagain!
}下面的代码是一个服务程序,创建一个名为5678的共享存储区并连接到自己的地址空间。
然后对该共享存储区写数据,写入小写的26个字母(‘a’--‘z’),数据写完后,进程等待直到客户进程读完数据,然后退出。
\os\PART_III\unix_p\ipc\exam15\shm_s.c
以下是一个shell程序,测试文件/home/shell/hello.c是否存在,如果存在则将其拷贝到/home/backup目录下,再在/home/shell 目录下重新创建一个。
#!
/bin/sh
#echo"
pleasecreatefilehello.c!
"
if[-e/home/shell/hello.c];
then
mv-f/home/shell/hello.c/home/backup/
echobackupingoldfile!
fi
cd/home/shell
touchhello.c
echo"
done!
exit0
下面的代码是一个服务程序,创建一个名为1234的消息队列。
然后根据用户输入的内容,往该消息队列发数据,当用户输入“end”,程序退出。
以下是在UCOS-II中使用内存管理的一个示例程序,在主函数中创建一块内存区,一个任务从该内存区中获取一个内存块,进行读写后,释放该内存块。
os\PART_I\SOURCE\OSMemCreate
在Linux中,用pthread库创建线程并等待其退出的程序。
\os\pthread\exam001.c