12级《实用操作系统》(A卷及答案)(5)
时间:2025-03-12
时间:2025-03-12
采用虚拟设备技术(SPOOLing)的操作系统,一旦有用户进程申请访问某个外设,操作系统设备管理进程就创建一个SP线程来虚拟要访问的外部设备。用户进程将把访问外设的任务交给SP线程来完成。
SP线程将执行外设申请、外设访问的操作。如果外设被其它进程占用,操作系统将阻塞SP线程,而不是用户进程。这种外设访问的模式可以大大提高外设访问和用户进程的执行效率。
5. (本题8分)某针对4G内存空间的操作系统采用一级页式存储管理方案,设计内存块(页)
的大小为8K。
(1) 试画出该操作系统划分页面的地址空间(2分)
(2) 设一个需要32K内存规模的进程,被连续存放在34821、34822、34823、34824
内存块中。试画出内存分配后操作系统创建的页表。(2分)
(3) 试画出实现动态地址重定向的方案示意图。(要求在画出各步地址计算、传输的
位数,画出CPU中的基址寄存器)。(2分)
(4) 试说明CPU中的基址寄存器在动态地址重定向中的作用。(2分)
(本题可以考试后再学习。关于内存管理的复习请参考本章的习题)
6. (本题10分)阅读下列程序,
(1)请对程序中各条语句的功能进行注释。(6分) HANDLE hHonk1,hHonk2; //开辟线程1和线程2的句柄变量。 HANDLE hHonkSemaphore; //开辟信号量句柄变量。 DWORD threadID; //开辟线程编号变量threadID。
void Honk1Thread() {
WaitForSingleObject(hHonkSemaphore,INFINITE); //注释:P函数,如果有其它线程正在播
放音乐,阻塞本进程。
printf("\n Thread1 is working \n");
mciSendString("play C:\\111.mp3",NULL,0,NULL); //注释:调用API函数播放一个音乐。 MessageBox(NULL,"Press any key to stop music 111.MP3","music 111.MP3 window",0); //注释:弹出提示窗口,等待用户按任意
键继续执行后面的指令。
mciSendString("close C:\\111.mp3",NULL,0,NULL); //注释:关闭音乐播放 ReleaseSemaphore(hHonkSemaphore,1,NULL); //注释:V函数,如果有其它线程被阻塞,
唤醒该线程程。(如果hHonkSemaphore信号量的阻塞队列中有被阻塞的线程或进程,唤醒头一个线程或进程)
}
void Honk2Thread() {
WaitForSingleObject(hHonkSemaphore,INFINITE); //注释:P函数,如果有其它线程正在播
放音乐,阻塞本进程。
printf("\n Thread2 is working \n");
mciSendString("play C:\\222.mp3",NULL,0,NULL);
MessageBox(NULL,"Press any key to stop music 222.MP3","music 222.MP3 window",0); mciSendString("close C:\\222.mp3",NULL,0,NULL); ReleaseSemaphore(hHonkSemaphore,1,NULL); //注释:V函数,如果有其它线程被阻塞,
唤醒该线程程。
}
void main(void) {
hHonkSemaphore = CreateSemaphore(NULL, 1, 1, "honkSemaphore"); //注释:创建信号量honkSemaphore,初
值为1,用于线程1和线程2的互斥。
hHonk1=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Honk1Thread, 0, 0, &threadID); //注释:创建线程1
hHonk2=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Honk2Thread, 0, 0, &threadID); //注释:创建线程2 MessageBox(NULL,"Press Enter to stop Main Function","Main window",0); CloseHandle(hHonk1); //注释:关闭线程1 CloseHandle(hHonk2); //注释:关闭线程2 }
(2)描述下列程序的用途和运行方式。(4分)
本程序创建两个播放音乐的线程,由这两个线程分别播放音乐。 该程序设置两个线程处于互斥的运行方式。