📄 netkernel.java
字号:
package nachos.network;import nachos.machine.*;import nachos.threads.*;import nachos.userprog.*;import nachos.vm.*;import nachos.network.*;/** * A kernel with network support. */public class NetKernel extends VMKernel { /** * Allocate a new networking kernel. */ public NetKernel() { super(); } /** * Initialize this kernel. */ public void initialize(String[] args) { super.initialize(args); postOffice = new PostOffice(); } /** * Test the network. Create a server thread that listens for pings on port * 1 and sends replies. Then ping one or two hosts. Note that this test * assumes that the network is reliable (i.e. that the network's * reliability is 1.0). */ public void selfTest() { super.selfTest(); KThread serverThread = new KThread(new Runnable() { public void run() { pingServer(); } }); serverThread.fork(); System.out.println("Press any key to start the network test..."); console.readByte(true); int local = Machine.networkLink().getLinkAddress(); // ping this machine first ping(local); // if we're 0 or 1, ping the opposite if (local <= 1) ping(1-local); } private void ping(int dstLink) { int srcLink = Machine.networkLink().getLinkAddress(); System.out.println("PING " + dstLink + " from " + srcLink); long startTime = Machine.timer().getTime(); MailMessage ping; try { ping = new MailMessage(dstLink, 1, Machine.networkLink().getLinkAddress(), 0, new byte[0]); } catch (MalformedPacketException e) { Lib.assertNotReached(); return; } postOffice.send(ping); MailMessage ack = postOffice.receive(0); long endTime = Machine.timer().getTime(); System.out.println("time=" + (endTime-startTime) + " ticks"); } private void pingServer() { while (true) { MailMessage ping = postOffice.receive(1); MailMessage ack; try { ack = new MailMessage(ping.packet.srcLink, ping.srcPort, ping.packet.dstLink, ping.dstPort, ping.contents); } catch (MalformedPacketException e) { // should never happen... continue; } postOffice.send(ack); } } /** * Start running user programs. */ public void run() { super.run(); } /** * Terminate this kernel. Never returns. */ public void terminate() { super.terminate(); } private PostOffice postOffice; // dummy variables to make javac smarter private static NetProcess dummy1 = null;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -