[关闭]
@740340735 2016-03-24T05:31:24.000000Z 字数 1951 阅读 844

操作系统 作业三

操作系统

陆一洲 5140309557 of F1403020


3.2
描述一下内核在两个进程间进行上下文功换的动作。
总的来说,操作系统必须保存正在运行的进程的状态,恢复进程的状态。保存进程的状态主要包括 CPU 寄存器的值以及内存分配,上下文切换还必须执行一些确切体系结构的操作,包括刷新数据和指令缓存。
进程关联是由进程的 PCB 来表示的,它包括 CPU 寄存器的值和内存管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其 PCB 中,然后装入经调度要执行的新进程的已保存的关联状态。

3.4
图表 3.24 里显示的程序,说明 A 行将会输出什么?
当控制回到父进程时,它的值会保持在 5,而子进程将更新并拷贝这个值。

3.5
问: 下面设计的好处和坏处分别是什么?系统层次和用户层次都要考虑到。
a. 对称和非对称通信
b. 自动和显式缓冲
c. 复制发送和引用发送
d. 固定大小和可变大小消息
A. 对称和非对称通信:对称通信的影响是它允许发送者和接收者之间有一个集合点。缺点是阻塞发送时,不需要集合点,而消息不能异步传递。因此,消息传递系统,往往提供两种形式的同步。
B. 自动和显式缓冲:自动缓冲提供了一个无限长度的队列,从而保证了发送者在复制消息时不会遇到阻塞,如何提供自动缓存的规范,一个方案也许能保存足够大的内存,但许多内存被浪费缓存明确指定缓冲区的大小。在这种状况下,发送者不能在等待可用空间队列中被阻塞。然而,缓冲明确的内存不太可能被浪费。
C. 复制发送和引用发送:复制发送不允许接收者改变参数的状态,引用发送是允许的。引用发送允许的优点之一是它允许程序员写一个分布式版本的一个集中的应用程序。Java’s RMI 公司提供两种发送,但引用传递一个参数需要声明这个参数是一个远程对象。
D. 固定大小和可变大小消息:涉及的太多是有关缓冲问题,带有定长信息,一个拥有具体规模的缓冲课容纳已知数量的信息缓冲能容纳的可变信息数量是未知的。考虑 Windows 2000 如何处理这种情况。带有定长信息(<256bytes),信息从发送者的地址空间被复制至接受进程的地址空间。更大的信息(如变长信息)使用共享内存传递信息。

3.9
  1. // An echo server listening on port 6007.
  2. // This server reads from the client and echoes back the result.
  3. // When the client enters the character '.' ?the server closes the connection.
  4. // This conforms to RFC 862 for echo servers.
  5. import java.net.*;
  6. import java.io.*;
  7. public class EchoServer
  8. {
  9. public static final int DEFAULT_PORT = 6007;
  10. public static final int BUFFER_SIZE = 256;
  11. public static void main(String[] args) throws IOException
  12. {
  13. ServerSocket sock = null;
  14. byte[] buffer = new byte[BUFFER_SIZE];
  15. InputStream fromClient = null;
  16. OutputStream toClient = null;
  17. try {
  18. // establish the socket
  19. sock = new ServerSocket(DEFAULT_PORT);
  20. while (true)
  21. {
  22. /**
  23. * now listen for connections
  24. */
  25. Socket client = sock.accept();
  26. /**
  27. * get the input and output streams associated with the socket.
  28. */
  29. fromClient = new BufferedInputStream(client.getInputStream());
  30. toClient = new BufferedOutputStream(client.getOutputStream());
  31. int numBytes;
  32. /** continually loop until the client closes the connection */
  33. while ( (numBytes = fromClient.read(buffer)) != -1)
  34. {
  35. toClient.write(buffer,0,numBytes);
  36. toClient.flush();
  37. }
  38. fromClient.close();
  39. toClient.close();
  40. client.close();
  41. }
  42. }
  43. catch (IOException ioe) { }
  44. finally {
  45. if (sock != null)
  46. sock.close();
  47. }
  48. }
  49. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注