WEBVTT 1 00:00:27.270 --> 00:00:37.290 William Cheng: This is the live lecture 11 so if you have questions about lecture 11 or about the programming assignment, please feel free to to ask me. 2 00:00:57.090 --> 00:00:57.810 Hardik Mahipal Surana: My professor 3 00:00:58.170 --> 00:01:00.300 Hardik Mahipal Surana: Bonnie, can I start asking questions. 4 00:01:00.600 --> 00:01:12.690 Hardik Mahipal Surana: No. Okay, so I had my first question is, so respect to the virtual file system and actual file system. I want to understand when this when the, when the business gets booted 5 00:01:13.830 --> 00:01:20.160 Hardik Mahipal Surana: How does the virtual file system know what on actual file systems are supported by the hardware. 6 00:01:21.390 --> 00:01:26.040 William Cheng: Yeah, so when you get to the colonel to assignment, you'll see an example how this is done. 7 00:01:32.580 --> 00:01:33.540 William Cheng: Hold on, let me see. 8 00:01:36.450 --> 00:01:38.430 William Cheng: Okay, this is one of the virtual 9 00:01:41.460 --> 00:01:48.960 William Cheng: Yeah so. So what happened is that this is the same thing with a lot of, you know, Polly morphic pointer. Remember what we see the 10 00:01:49.800 --> 00:02:00.300 William Cheng: The example for a disk driver right we have you know the Western Digital 123 the CTA 76 or something like that. So at some point we have to have this binding process right we take the 11 00:02:00.990 --> 00:02:08.250 William Cheng: We take the device driver and then we need to buy into one of those. Well, one of those objects, right. So, so part of the process over here is 12 00:02:08.850 --> 00:02:24.060 William Cheng: For the device driver is device discovery when you discover devices, say, oh, you know, this one, you know, so, so when we put our system, we just detect Western Digital 123 instead of CK 67. So at that point, we need to buying the pointer to, you know, to, to, to the array of function pointer. 13 00:02:25.260 --> 00:02:32.580 William Cheng: Okay, so as you system starts you need to identify what you have and then you find the pointer to it. And then at that point you will be able to use it. 14 00:02:33.600 --> 00:02:35.550 Hardik Mahipal Surana: So this is done as a part of the boot. 15 00:02:37.020 --> 00:02:48.510 William Cheng: Well, I mean, you know, it's really not part of the defense of how you look at it right i mean you know that the food is to get you know I guess that the way we find the routing process is the booking process. Get to the operating system. 16 00:02:49.920 --> 00:02:59.400 William Cheng: Okay, so in that case, you know, it's not part of the booth right but at the time of the operating system start, you need to decide how do you find all these pointers with the 17 00:03:00.870 --> 00:03:14.790 William Cheng: You know, so, so, so there's going to be some sort of a discovery process and we mentioned, you know, also today with the device driver. We have USB devices they are discovered as you run the operating system right so so clearly that's not done at the boot process. 18 00:03:16.230 --> 00:03:16.590 Hardik Mahipal Surana: Okay. 19 00:03:17.430 --> 00:03:22.290 William Cheng: Okay, having but but also we mentioned in the good old days in the old days of Unix. What it will do is that they will 20 00:03:22.500 --> 00:03:33.270 William Cheng: You know when you have all the device driver installed inside your operating system. When you boot the operating system as part of the boot, you need to discover all the devices. So you go to the bus and you have every device driver, try to discover itself. 21 00:03:33.900 --> 00:03:39.600 William Cheng: If the device driver can find itself. But then in that case you can you can create a pointer, you can create the object and the point of it. 22 00:03:40.530 --> 00:03:51.270 William Cheng: But, you know, since that was done a long time ago and it was turns out to be a really, really slow process. People don't do that anymore. Especially because we have dynamic Lincoln and loading. So, so, you know, so there's no need to do that anymore. 23 00:03:52.650 --> 00:03:53.010 Hardik Mahipal Surana: Okay. 24 00:03:53.610 --> 00:03:54.120 William Cheng: Yeah, so, so 25 00:03:54.750 --> 00:04:02.490 William Cheng: Introductory operating system class. We're not going to learn, you know, we were basically witness to introduce a lot of the cars that and your kernel programming assignment. If you 26 00:04:02.850 --> 00:04:12.570 William Cheng: You know, if you read your co very, very carefully, you will see how some of these things are done. Okay, but we're not going to cover every, you know, every little detail exactly how you do this. 27 00:04:13.260 --> 00:04:24.150 Hardik Mahipal Surana: Okay, Gordon and in part three of lecture 11 in slide number 22 you talk about how we actually load data from a disk, right. 28 00:04:26.850 --> 00:04:29.670 William Cheng: How to load data from a desk. 29 00:04:31.980 --> 00:04:36.510 William Cheng: Okay, so I need to. I mean, right now I only have this set of slides loaded 30 00:04:40.140 --> 00:04:54.600 Hardik Mahipal Surana: OK, OK. I think I can just ask it without the slide also. So, my only question is now, when we want to read data from it is that time does the disk controller use direct memory access to copy that into physical memory. 31 00:04:56.670 --> 00:05:04.830 William Cheng: Well, again, depends on what the device, you know, if this fast device or slow device typically that this devices. They are they are the one with the DMA 32 00:05:05.670 --> 00:05:16.260 William Cheng: Okay, so what you need to do is that you need to issue that this a command to say that go transfer data, you know, so, so I guess those are the DMA register I you need to specify what is the source address. What is the destination address 33 00:05:16.530 --> 00:05:24.330 William Cheng: And you took this controller as they go. And then what it will do is that it will start taking over the bus all by itself transmitting data using, you know, the MA. 34 00:05:26.310 --> 00:05:31.290 William Cheng: Okay, right. So, so once you start that you don't know when it's going to finish. So your kernel fair will fall asleep. 35 00:05:32.400 --> 00:05:35.460 Hardik Mahipal Surana: After the IQ, you know, give up the CPU and go to sleep. 36 00:05:36.240 --> 00:05:40.650 William Cheng: And then when the data transfers complete the this the the the 37 00:05:41.280 --> 00:05:53.130 William Cheng: That this controller is going to generate interrupt interrupt interrupt service routine yeah unblock the colonel threat and when the current author wakes up and says, Oh, the operation must be done. Let me check if everything's okay and then what we'll do is we'll go from there. 38 00:05:54.510 --> 00:06:06.360 Hardik Mahipal Surana: Okay, yeah. So my next question is, with regards to pipes. So when we actually create a pipe. Is there any entry that we create in the system file table. 39 00:06:09.720 --> 00:06:24.570 Hardik Mahipal Surana: That entry. So when we create a pipe we create to file descriptors one for eating one for writing. So in both of these cases, where do they point to in the system file table and does. Is there an actual pointer to, you know, some place in memory later. Is there like a 40 00:06:25.710 --> 00:06:26.130 Hardik Mahipal Surana: Pointer 41 00:06:26.820 --> 00:06:29.370 William Cheng: So we don't really specify a file in this case they 42 00:06:30.180 --> 00:06:40.320 William Cheng: Were again, you know. We are just giving you the concept. We're not exactly the details how to do that. I think your kernel source code. There's actually pipe inside the weeks, Colonel. 43 00:06:40.890 --> 00:06:46.800 William Cheng: I'm not sure I haven't because you know you're not, you don't need to do that part. So therefore I, you know, so they are ignored. 44 00:06:47.190 --> 00:06:55.260 William Cheng: But if you look at this, this picture over here we have an array of file descriptor. Right. And we know that every file descriptor entry. It's a pointer to a file object. 45 00:06:56.730 --> 00:06:57.330 William Cheng: Right. 46 00:06:57.450 --> 00:07:04.740 William Cheng: So therefore, this one must be appointed to a file object. And if you read from that thought you know that the file object you're going to get data from the pipe. 47 00:07:05.940 --> 00:07:06.270 Hardik Mahipal Surana: Okay. 48 00:07:06.540 --> 00:07:18.090 William Cheng: And then the next file descriptor over here. Again, this is the partner to a file object, so therefore they point to the file object over here. And if you write using that file descriptor, you're going to end up so so yeah the the pipe is a producer consumer problem, right. 49 00:07:18.810 --> 00:07:27.210 William Cheng: We saw the code for the producer consumer problem before, but now the interface is going to be a little different because you're going to use the file object to connect to the producer consumer 50 00:07:28.590 --> 00:07:29.220 Hardik Mahipal Surana: OK. OK. 51 00:07:30.270 --> 00:07:36.960 Hardik Mahipal Surana: OK, so basically you're saying that the actual implementation of where it points to where the data is temporarily stored 52 00:07:37.680 --> 00:07:48.000 Hardik Mahipal Surana: When it's redundant before it's red is sort of hidden from the user. But there is some minor point and it does point to some temporary location that the data is actually stored 53 00:07:49.590 --> 00:07:56.160 William Cheng: Inside of our system is very complicated. We only introduction and I sort of keep it a concept of, you know, the file descriptor table over here. 54 00:07:56.340 --> 00:08:04.860 William Cheng: Simply point to the fallout jag and exactly how to fall object implement all these different kinds of abstraction. Is that a colonel. Those are implementation dependent right 55 00:08:05.730 --> 00:08:12.960 William Cheng: Okay. Okay, so we don't we don't want to talk about and say that this is the only way to implement that we just did that give you the idea to say this is, you know, this is what the interface looks like. 56 00:08:13.200 --> 00:08:16.170 William Cheng: And then, you know, different operating system at different way to implement it. 57 00:08:17.070 --> 00:08:19.830 William Cheng: Okay but but but what's important is to understand the abstraction. 58 00:08:20.220 --> 00:08:32.040 William Cheng: So again, this picture over here is completely out of Colonel right the you know the user space on the left. So as far as the users concern is that there is, you know, there's something called a pipe. You can refund the pipe. You could write to the pipe using code like this. 59 00:08:33.180 --> 00:08:36.120 William Cheng: Right, the user space program only use the file abstraction. 60 00:08:36.630 --> 00:08:40.110 William Cheng: Okay, it doesn't really care how the colonel implement all these kind of stuff. 61 00:08:41.460 --> 00:08:48.480 William Cheng: Right, so over here. We said why the Colonel, you know, the way so they so the implement the pipe abstraction is to use a producer consumer problem. 62 00:08:50.100 --> 00:08:53.370 William Cheng: Okay detail is really not that important. Okay. 63 00:08:53.580 --> 00:09:01.590 Hardik Mahipal Surana: So from a high level concept I want to understand is this pipe concept of part of the virtual phone system or actual transition or 64 00:09:03.210 --> 00:09:12.330 William Cheng: Well, so at the virtual file system you present the fall abstraction nice default abstraction is, you know, the thousand array of bytes and how do you make the font bigger. How do you make 65 00:09:12.660 --> 00:09:22.530 William Cheng: It smaller and also there are all these you know system call that we just went over and let your 11. So those are all you know system call for you to manipulate this file abstraction. 66 00:09:23.130 --> 00:09:27.990 William Cheng: Okay, but we haven't really talked about how they're implementing the actual file system that will be in chapter six. 67 00:09:29.430 --> 00:09:29.760 Hardik Mahipal Surana: Okay. 68 00:09:31.920 --> 00:09:36.630 William Cheng: Right. So again, this is this is Unix and Linux other operating system. They will implement different kinds of abstraction. 69 00:09:38.790 --> 00:09:42.660 Hardik Mahipal Surana: Okay, so just one last question. Actually, with respect to the colonel assignment. 70 00:09:43.470 --> 00:09:51.360 Hardik Mahipal Surana: So as a part of our final submission. Do we have to, by default, run the tests through occasion, or do we have to 71 00:09:53.280 --> 00:09:57.120 Hardik Mahipal Surana: Probe like run the test separately and an occasion to run later on. 72 00:09:57.720 --> 00:10:04.800 William Cheng: Yes. So, so when the greater grace the grid has to follow the branding guidelines. Right. So if you don't have any way for us to run those tests. 73 00:10:05.370 --> 00:10:11.790 William Cheng: There's no way for for you to get any partial credit. Right. Okay. So, therefore, in order, so we have such an A, which is 74 00:10:12.240 --> 00:10:18.660 William Cheng: We look at the grading guidelines section A are the required care certs right so you should try to get all the, you know, all the credit there. 75 00:10:18.900 --> 00:10:26.790 William Cheng: And then part a Part B is just Keisha right, you need to run those those commands and then parse Section C is the favorite test. 76 00:10:27.510 --> 00:10:31.800 William Cheng: Right, so therefore you need to create a case shell command. I mean, again, if you want full credit 77 00:10:32.220 --> 00:10:42.750 William Cheng: Okay, if you want a full credit, you need to create a case shell command your submission. So this way, the when the greater tie and also I think in the readme file, you have to tell the greater what the title. 78 00:10:43.650 --> 00:10:44.100 Hardik Mahipal Surana: Is probably 79 00:10:45.270 --> 00:10:52.080 William Cheng: Right. So then, in this case, the greater will run a command see everything is perfect. They then you get all the they get full credit. Okay, if you 80 00:10:52.320 --> 00:10:54.330 William Cheng: cannot provide the shell command. 81 00:10:54.900 --> 00:11:00.030 William Cheng: I have no idea how how to test it. I guess if there's a way to test it. Right. You can you can do see us world to test 82 00:11:00.810 --> 00:11:08.460 William Cheng: So you can ask the greater to change the conflict. I am K. But in that case, you're gonna you're gonna lose 50% of the credit or something like that. 83 00:11:09.060 --> 00:11:15.780 William Cheng: So good. The choices. You know, some people get all the way to the case out the words so euthanasia is not working going to end up losing points. 84 00:11:16.740 --> 00:11:18.360 William Cheng: Okay, so if you all full credit 85 00:11:19.230 --> 00:11:23.460 William Cheng: You know, I guess that's what I've been saying the past few lecture is that you feel for every 86 00:11:23.910 --> 00:11:32.850 William Cheng: So for the test in Section seizure create one page document what they are to testing section D you create to work a shell command. Right. So this way to go to 87 00:11:33.120 --> 00:11:38.610 William Cheng: Remove out. You just, you just how the greater than say run this command run this command run this command and then you're going to get full credit 88 00:11:40.110 --> 00:11:48.300 Hardik Mahipal Surana: Got it. Okay, I just, I get a point, I just want to clarify whether running the tests like the the favorite test somehow test the 89 00:11:50.130 --> 00:11:54.810 Hardik Mahipal Surana: Test. I just want to understand whether the interface to actually run those tests are supposed to be through the occasion or 90 00:11:55.440 --> 00:11:56.640 William Cheng: If you are full credit. Yeah. 91 00:11:56.730 --> 00:11:57.840 Hardik Mahipal Surana: Okay, yes. 92 00:11:58.230 --> 00:12:05.700 William Cheng: So some people either cannot get cash out to work, you know, by by by the last day. Well, in that case, they have to come up with a different way to try to get as many 93 00:12:05.760 --> 00:12:07.470 William Cheng: Americans partial credit as possible. 94 00:12:09.000 --> 00:12:13.950 William Cheng: Okay, because some people when they turn on interrupt, nothing works anymore. So in that case, you cannot run case, rather than what do you do 95 00:12:15.150 --> 00:12:29.700 William Cheng: Right, so, so, so people who can't get cash out to run. They need to somehow you know either. Talk to me, and try to find a way to get as many partial credit points as possible. My recommendation is to, you know, I guess I keep saying that in class that you should add these three Keisha commands. 96 00:12:29.970 --> 00:12:32.190 Hardik Mahipal Surana: Good. Okay. Thank you so much. Yeah. 97 00:12:36.240 --> 00:12:41.340 Andrew Strimaitis: Hi Professor, I have a quick question. So slide 43 98 00:12:42.870 --> 00:12:44.430 Andrew Strimaitis: That's invoking the signal handler. 99 00:12:51.150 --> 00:12:51.690 William Cheng: Yes. 100 00:12:53.130 --> 00:12:59.310 Andrew Strimaitis: It's about the yellow box there where it says if SIG handler makes a system called and we are fine. 101 00:12:59.610 --> 00:13:07.290 Andrew Strimaitis: Yeah. Could you explain that a little bit more like I'm a little confused and what makes then the system call work. 102 00:13:08.340 --> 00:13:09.570 William Cheng: So what happened is that, you know, 103 00:13:10.590 --> 00:13:16.230 William Cheng: You know inside your user space program right when you make a system call you expect the colonel stock to be empty. 104 00:13:17.430 --> 00:13:25.110 William Cheng: Mm hmm. Right. So, so we have to make sure that the colonel stack is empty over here because inside a signal handler. You can also make a lot of system call. Right. So there's a 105 00:13:25.380 --> 00:13:29.790 William Cheng: Chapter two, there's a slide to say these are all the, the, the system call you're allowed to make 106 00:13:30.240 --> 00:13:42.210 William Cheng: Is that a signal handler and there's like 50 of them, something like that, right. So, so instead of signal. How will you make system call you're gonna you know you're going to take over the colonel stack. So if there's stuff at the bottom of the colonel stack, they will all get wiped out. 107 00:13:43.650 --> 00:13:43.920 Andrew Strimaitis: Huh. 108 00:13:44.310 --> 00:13:53.310 William Cheng: Okay. So, therefore, you know, in order for you to get ready to execute code is that a signal handler, you better know that that's what we copy the thing you know out so that we can have an empty Colonel stat. 109 00:13:57.090 --> 00:13:57.540 Andrew Strimaitis: Okay. 110 00:13:58.620 --> 00:14:03.780 William Cheng: Right, because if we leave it like this. Like before you can really like this and then you start, you know, making you know 111 00:14:05.400 --> 00:14:17.220 William Cheng: You know, execute code inside of signal handler when it comes execute you know when when it make a system call you're going to wipe out the bottom or the colonel stag over here. So once you do that. Well, later on, there's no way for you to 112 00:14:18.600 --> 00:14:20.970 William Cheng: return back to your original state. 113 00:14:24.930 --> 00:14:33.570 William Cheng: Right, because this is all about, you know, saving contacts and restore contacts. So this is the contact that you need to save in order for you to later on returned back to, yo. Yo what you were doing. 114 00:14:34.080 --> 00:14:40.740 William Cheng: In inside user space program, but they you need to hide it inside the user space stack and they don't restore it and they can go back 115 00:14:40.950 --> 00:14:43.590 Andrew Strimaitis: So then when is it not okay to make the system call 116 00:14:45.630 --> 00:14:50.010 William Cheng: So Robin is that, you know, so when you press Control. See, you're inside a kernel over here, right. 117 00:14:50.160 --> 00:14:57.690 William Cheng: So now your user space program is suspended if somehow the user space, well can now make system called then it's going to wipe out of stuff inside of kernels that 118 00:14:58.170 --> 00:15:00.510 Andrew Strimaitis: Okay, so it just erases memory. 119 00:15:01.230 --> 00:15:10.530 William Cheng: Right. Yes. Why is going to erase your contacts right the contacts is save at the bottom of the colonel set right if you erase it and they, they, you know, you lose that forever. 120 00:15:11.100 --> 00:15:12.150 Andrew Strimaitis: Okay, great. 121 00:15:12.600 --> 00:15:19.260 William Cheng: So, so the idea here is that we, we should only return back into the user space with the colonel stack is completely empty. 122 00:15:19.890 --> 00:15:21.240 William Cheng: Okay, then it will be safe. 123 00:15:22.680 --> 00:15:22.920 Andrew Strimaitis: God 124 00:15:23.580 --> 00:15:28.830 William Cheng: Okay, yeah. Because you know he's had a kernel, you don't really know what the user space program is going to do right so so 125 00:15:29.490 --> 00:15:40.260 William Cheng: When you return back to the user space robot. You don't know if the user space will guy is going to run into user space for a while before to make another system call or it's going to make a system called right away. The Colonel doesn't really know what the user space program is doing. 126 00:15:41.340 --> 00:15:49.110 William Cheng: Okay. So, therefore, you got to make sure that Colonel isn't good day before you leave the Colonel. Why did you leave the Colonel, you really don't know what these are space programs that I do. 127 00:15:50.580 --> 00:15:52.020 Andrew Strimaitis: Okay. Okay. Thank you. 128 00:16:02.130 --> 00:16:03.030 Chao Xiang: Hi Professor 129 00:16:03.300 --> 00:16:13.980 Chao Xiang: Hey, I have a question at page 50 880-858-5858 130 00:16:16.590 --> 00:16:25.230 Chao Xiang: So here it says here is to memory space point to the same fire object right but well 131 00:16:25.530 --> 00:16:28.560 William Cheng: Because otherwise. So, so this is this is a memory segment. 132 00:16:28.830 --> 00:16:31.380 William Cheng: Right, we don't have one address space. 133 00:16:31.890 --> 00:16:38.220 William Cheng: Guys, oh so inside the space with divided into memory segment. So in this case member segment is also known as as regions. 134 00:16:39.660 --> 00:16:49.350 Chao Xiang: Um, yeah. My question is how can to settlement point to wall object while often these righty, and private 135 00:16:50.940 --> 00:16:51.420 Chao Xiang: Setting 136 00:16:52.590 --> 00:17:01.590 William Cheng: Right, so, so, so we so this one is you read an execute right so if you try to write to that you're going to get a segmentation fault. Right. This one is rewrite and we're doing copy on right 137 00:17:01.980 --> 00:17:11.730 William Cheng: Okay, so they pointed this file object is when they need data from the file, they will use this fall object when they don't need a data on this fall object that they can they can get the data somewhere else. 138 00:17:14.010 --> 00:17:14.820 Chao Xiang: So this 139 00:17:15.900 --> 00:17:23.880 Chao Xiang: Program can write and read at same time. And while do the right thing to do the writing copy 140 00:17:24.420 --> 00:17:32.220 William Cheng: Yeah, so, so, so again this is this is just introductory slide. Will you getting into Colonel three things going to get a little more complicated. Okay. 141 00:17:32.640 --> 00:17:41.970 William Cheng: So what happened is that, you know, over here, there's a file right so the file can be very, very big, but we managed the file one page at a time. Right, so therefore going to divide them into pages, each one of them is four kilobytes. Yeah. 142 00:17:42.360 --> 00:17:51.420 William Cheng: So in this case, some of the, you know, some of the four kilobytes are sitting inside of inside of our system. So if you want to get it. You have to go to the desk and you have a cold transfer the data. 143 00:17:51.600 --> 00:17:57.090 William Cheng: For this into memory. Some of them, you're ready ready into memory and some of them. You already are doing copy on right 144 00:17:57.330 --> 00:18:09.180 William Cheng: Right. So in that case, there are additional data structures over here. Try to remember whether this data is on this call in memory. If it's a memory. And if you're doing copy on write, there's some other pointer over here will point it was sort of point to where the data is 145 00:18:11.370 --> 00:18:14.880 William Cheng: OK, so there's more information as we go into chapter seven. 146 00:18:16.560 --> 00:18:16.920 Be great 147 00:18:18.000 --> 00:18:27.090 William Cheng: Again, this is a very, very high level, you know, a picture to say that, you know, the these two guys pointed a file object because if you need data from the file system while you have to use the fall object. 148 00:18:28.470 --> 00:18:32.580 William Cheng: Way, but once you make a copy. Then, then you don't follow this pointer anymore. You follow some other pointer. 149 00:18:34.860 --> 00:18:35.370 Chao Xiang: You 150 00:18:38.700 --> 00:18:40.440 William Cheng: The detail is going to be in chapter seven. 151 00:18:57.210 --> 00:19:10.380 William Cheng: You know, like the kernel code. It's just that you're, you know, warm up code. One more, one warm up to write me you know you can you can make decision based on the current state of your program and will do exactly the same thing inside the crown. 152 00:19:11.430 --> 00:19:15.510 William Cheng: And these are just data structure manipulation. Right. So there's no difference between that and warm up to 153 00:20:05.310 --> 00:20:09.000 William Cheng: Anyone else has a question about the lecture or Colonel one 154 00:20:16.770 --> 00:20:18.930 Andrew Strimaitis: So for this slide. 155 00:20:20.280 --> 00:20:32.280 Andrew Strimaitis: I noticed how in some earlier slides, when we were talking about memory or stuff like in terms of stack or texts or something. We mentioned that the model in the book was flipped. 156 00:20:32.700 --> 00:20:36.480 Andrew Strimaitis: Yes, I was wondering if this is something similar, where 157 00:20:37.770 --> 00:20:40.590 Andrew Strimaitis: The way we're looking at this model is always going to look like this. 158 00:20:41.910 --> 00:20:49.710 William Cheng: Yeah, so, so, so this is a linked list right so we sort them based on the virtual address the small is on the left and then big is on the right. 159 00:20:51.030 --> 00:21:00.240 William Cheng: So in this case, it's not flipped because usually the small is on the left because of the way the number line is drawn the small number is going to be on the left and the big numbers on the right. 160 00:21:01.200 --> 00:21:04.290 William Cheng: Okay, yeah. So, so this is this is normal. 161 00:21:07.950 --> 00:21:10.350 William Cheng: So later on when you do your kernel three assignment. 162 00:21:10.890 --> 00:21:22.410 William Cheng: You, you, you also need to implement the address space. So you have to implement the virtual memory map. So you're going to end up with a link address and then again you need to sort them and then you know when you get a pace file, you're going to search for it. 163 00:21:22.800 --> 00:21:29.850 William Cheng: Now, bye bye bye bye following with by walking down the link list and should find out you know when you go to baseball which your memory segment. Does it belong to 164 00:21:31.050 --> 00:21:34.530 William Cheng: And then you can look at rewrite look at private all these things that you can decide what to do. 165 00:21:39.150 --> 00:21:42.930 William Cheng: And then if you need data from the file you will talk to the fall object, you know, etc. Yeah. 166 00:22:11.850 --> 00:22:14.100 William Cheng: Anyone else has questions. 167 00:22:41.250 --> 00:22:52.350 William Cheng: Okay, if no one has this question. I'm gonna stop the recording and then you can, you know, talk to each other and okay and then you know if you have questions, feel free to come to office hour in the afternoon.