WEBVTT 1 00:00:45.630 --> 00:00:46.830 William Cheng: Welcome to lecture. 2 00:00:46.890 --> 00:00:56.850 Lalit Gupta: 21st and I have some adults. Sure. 3 00:00:59.010 --> 00:00:59.820 Lalit Gupta: So my 4 00:01:05.850 --> 00:01:16.980 Lalit Gupta: One of my daughters, like I'm bit slightly confused on this cleanup page function and cleanup function because in one of your 5 00:01:18.060 --> 00:01:23.490 Lalit Gupta: Email a you said the key. I think of, maybe, I think in FAQ. It is written. 6 00:01:24.930 --> 00:01:25.350 Lalit Gupta: That 7 00:01:27.210 --> 00:01:43.350 Lalit Gupta: That that there's a I think it says, what does the polymorphous cleaner page me and it will return if a page is dirty, which means that if it is that it is different from what is on the desk and to clean the page frame to write it back and to clean the page frame. 8 00:01:44.580 --> 00:01:46.470 Lalit Gupta: Needs to write it back to the store. 9 00:01:47.460 --> 00:01:48.030 Lalit Gupta: Comes clean 10 00:01:48.420 --> 00:01:48.840 Yes. 11 00:01:49.860 --> 00:01:50.400 Lalit Gupta: Whereas 12 00:01:51.510 --> 00:01:59.280 Lalit Gupta: In the, in the widget artsy directly like biomorphic pointer function. 13 00:02:00.330 --> 00:02:00.840 Lalit Gupta: There is a 14 00:02:02.010 --> 00:02:11.310 Lalit Gupta: comment that says that right the content of the page dream of starting at the address this, but the the cardinal address of the Patriots 15 00:02:15.270 --> 00:02:16.680 William Cheng: Let me see, let me go there. 16 00:02:25.170 --> 00:02:25.770 William Cheng: I see. 17 00:02:26.070 --> 00:02:26.640 Yes. 18 00:02:29.100 --> 00:02:30.780 William Cheng: I don't think there's a fall like that. 19 00:02:32.310 --> 00:02:34.380 William Cheng: I think while 20 00:02:35.460 --> 00:02:36.390 Lalit Gupta: I let me tell you the 21 00:02:38.550 --> 00:02:39.870 Lalit Gupta: Guilt is sponsored 22 00:02:52.770 --> 00:02:53.190 Lalit Gupta: Really 23 00:02:54.540 --> 00:02:55.050 William Cheng: The place. 24 00:02:56.850 --> 00:02:59.850 Lalit Gupta: Maybe had a file. Okay, that's, that's the one. 25 00:03:00.930 --> 00:03:05.730 Lalit Gupta: Yeah, it seems like the content of the page fame starting at that address this. 26 00:03:06.030 --> 00:03:06.420 Lalit Gupta: Which is 27 00:03:06.450 --> 00:03:08.310 Lalit Gupta: I think Cardinal enter for the pitch for him. 28 00:03:09.510 --> 00:03:13.020 Lalit Gupta: To the page identity identified by the object. 29 00:03:13.140 --> 00:03:14.130 Lalit Gupta: And the page number 30 00:03:14.400 --> 00:03:20.460 Lalit Gupta: Then it's sort of, it seems from from looking at this thing. It seems to me we are writing 31 00:03:21.960 --> 00:03:24.120 Lalit Gupta: The writing the content. 32 00:03:25.620 --> 00:03:29.940 Lalit Gupta: Which is identified by the page object with the page number two the cardinal part of the address. 33 00:03:31.290 --> 00:03:31.710 William Cheng: To the 34 00:03:32.340 --> 00:03:40.020 Lalit Gupta: To the cardinal part of the page because we have this PDF add right so that I think correspond to the cardinal part of the address. 35 00:03:41.730 --> 00:03:42.600 Lalit Gupta: Or the page team. 36 00:03:44.970 --> 00:03:49.320 William Cheng: Right, so p of add on. That's the, that's the data for the page frame right 37 00:03:51.240 --> 00:04:02.850 William Cheng: Okay, it says, write it, you know, write the content of the page rain to the page identified by PF LBJ and page nom. So that's, you know, that's, that's the disk, right. 38 00:04:06.480 --> 00:04:13.560 William Cheng: I mean, if we if we have a fighting to address space writing into the address space, the same as writing into the file though right into the desk right 39 00:04:16.680 --> 00:04:20.670 Lalit Gupta: Oh, sorry. Oh, so this p. So, what is this 40 00:04:22.320 --> 00:04:25.650 Lalit Gupta: So this PDF or widget and PDF page number will correspond to disk. 41 00:04:26.490 --> 00:04:27.750 William Cheng: With the corresponding this 42 00:04:29.580 --> 00:04:30.330 Lalit Gupta: Okay, that's 43 00:04:31.290 --> 00:04:35.760 William Cheng: polymorphous them you know for some object and make perfect sense. So object doesn't make sense at all right. 44 00:04:38.280 --> 00:04:38.550 Lalit Gupta: Oh, 45 00:04:39.120 --> 00:04:47.670 William Cheng: And then when you have an array of function pointer. Not every object have to implement all the functions, right, we saw before, you know, like, you know, directory and files. 46 00:04:48.690 --> 00:04:54.300 William Cheng: You know that the file you can read and write, but for the directory those, you know, those, those functional valid right 47 00:04:55.710 --> 00:05:08.550 William Cheng: So same meaning of the page, if you will, you try to clean a page you want to make this page, the same as what's on the desk. What if there's no disk way. There's no death, there's, you know, then then then then what what what do you do, okay. 48 00:05:12.090 --> 00:05:12.720 He 49 00:05:14.070 --> 00:05:15.120 Lalit Gupta: Yeah properties. 50 00:05:15.180 --> 00:05:23.970 William Cheng: Represent for us this object over here right for Colonel three there's three kinds of debtors anonymous object. There's the shadow object and then there's the, the one inside the vino 51 00:05:24.810 --> 00:05:39.540 William Cheng: Rather way inside the vino makes sense that you want to make it the same as what's on the desk right so in that case. Yeah, you will use clean page and the co has been written for you already. Right. So that one is Colonel FS VN right so that's this one is clean page right 52 00:05:40.680 --> 00:05:54.090 William Cheng: Okay, so this one. What it does is that, you know, it just write the data out to the desk. Okay. But before the other two. You know, the comment. The comment is pretty weird right Curnow via that old see 53 00:05:55.830 --> 00:05:56.730 William Cheng: It says 54 00:05:58.200 --> 00:06:00.330 William Cheng: You know, the next two functions are not difficult. 55 00:06:01.380 --> 00:06:03.090 Lalit Gupta: Yeah, there's very 56 00:06:04.230 --> 00:06:12.780 William Cheng: Rapid because again we're using polymorphous them some, you know, some of these talking, you know, doesn't really make sense, but you still have to do something to make it work. 57 00:06:14.520 --> 00:06:17.580 William Cheng: Okay. Similarly, with the anonymous object Kernow 58 00:06:18.750 --> 00:06:23.430 William Cheng: VM Ananda see right at the end he says the following three functions should not be difficult, right. 59 00:06:25.410 --> 00:06:28.710 William Cheng: Okay, because these functions doesn't make sense where these two objects, right. 60 00:06:31.800 --> 00:06:33.150 William Cheng: There's really nothing to clean. 61 00:06:35.250 --> 00:06:37.410 Lalit Gupta: Yes. Seems like that. 62 00:06:38.160 --> 00:06:45.210 William Cheng: So, so it's a, it's a, it's a tiny little puzzle. Well, in that case, what are you supposed to do, right. So anyways, that's what people need to figure out what to do. 63 00:06:46.290 --> 00:06:50.670 William Cheng: Knowing that you know these. I mean, you know, in Colonel to, you know, 64 00:06:51.450 --> 00:07:01.590 William Cheng: You know, some of these functional, they don't use the null pointer and you know you you're required to test the null pointer to make sure that the pointer is not know they can actually call it 65 00:07:02.190 --> 00:07:12.480 William Cheng: But for some reason for mmm LBJ the Brown University will decide to take a different approach. They, they have all these functions, even if the functions are, you know, not not useful for this type of object. 66 00:07:15.930 --> 00:07:17.280 William Cheng: So the question is, why should you do 67 00:07:20.100 --> 00:07:26.910 Lalit Gupta: For the shadow object is it doesn't the shadow object has the ability because in the shape. Okay. We have a 68 00:07:30.540 --> 00:07:47.370 Lalit Gupta: We have a memory area and that will correspond to a chain or that will point to a chain of shadow object. Right, right. Shadow object has shadowed a jacket basically empty object that is that is that manages some pages for the pages. 69 00:07:47.670 --> 00:07:52.740 Lalit Gupta: Bad, and then we want to. And then we want to clean that page, it makes sense to 70 00:07:53.850 --> 00:07:55.050 Lalit Gupta: Write it back to the desk. 71 00:07:55.770 --> 00:07:56.430 William Cheng: Right, yeah. 72 00:07:58.770 --> 00:08:05.640 William Cheng: Right. So, but, but, but, you know, as I mentioned in class shadow object does not have a backing store. So where do you write it to 73 00:08:10.890 --> 00:08:14.820 William Cheng: Anonymous up. Dad, don't have a backing store when you write the patrons do 74 00:08:16.080 --> 00:08:16.890 William Cheng: That's the puzzle. 75 00:08:18.720 --> 00:08:19.620 Lalit Gupta: Okay, I 76 00:08:20.910 --> 00:08:24.480 Lalit Gupta: Mean, it has to be written somewhere. We call it is like important stuff. 77 00:08:25.440 --> 00:08:27.900 William Cheng: There's no backing store. There's no way to write 78 00:08:29.580 --> 00:08:32.250 Lalit Gupta: But if you don't write it, then it will be bad. 79 00:08:33.270 --> 00:08:33.810 William Cheng: Why 80 00:08:34.500 --> 00:08:35.580 Lalit Gupta: Because we have 81 00:08:36.660 --> 00:08:37.860 Lalit Gupta: Because we have a 82 00:08:39.510 --> 00:08:47.040 Lalit Gupta: Shadow Jane. And then when we do copy on write, we actually data point, there is a pointer in the shadow change that is actually pointing to the 83 00:08:48.420 --> 00:08:51.270 Lalit Gupta: I think I can probably from the slide, I can tell you better 84 00:08:51.450 --> 00:08:58.110 William Cheng: And I know. But, but, but, you know, the idea is to make the data, the same as what's on the desk, but there's no desk. 85 00:08:59.550 --> 00:09:03.390 William Cheng: You know, for shadow object reporting on those objects, they don't have a backing store. 86 00:09:06.630 --> 00:09:19.560 Lalit Gupta: Or dance that data will be because we have because when we do copy and right we actually there is a pointer that is pointing to that that that page, right, and that is the 87 00:09:20.130 --> 00:09:24.030 William Cheng: Word before the shadow objects, although you know all the patients are in memory. There's no disk. 88 00:09:25.110 --> 00:09:29.700 William Cheng: The only thing that can be on this is the, the, the white inside the the vino 89 00:09:33.150 --> 00:09:39.930 Lalit Gupta: Yes, but isn't that possible that that the pages which is on memory can be paged out by the page or demon 90 00:09:40.680 --> 00:09:41.700 William Cheng: How is it going to find it. 91 00:09:44.640 --> 00:09:45.210 William Cheng: How is the pig. 92 00:09:46.230 --> 00:09:46.740 William Cheng: Oh, 93 00:09:47.370 --> 00:09:48.840 Lalit Gupta: OK. OK. 94 00:09:50.130 --> 00:09:50.730 William Cheng: OK, yeah. 95 00:09:51.180 --> 00:09:52.650 Lalit Gupta: hide it from the pod. 96 00:09:53.220 --> 00:09:59.610 William Cheng: It's hidden on the page agreement. So there's no harm if you don't write it back to the desk, because there is no corresponding image on the desk. 97 00:10:01.620 --> 00:10:05.790 Lalit Gupta: Okay, so it's yeah look at some point we have to hide it from the page or demon. So then it 98 00:10:05.790 --> 00:10:16.890 William Cheng: can hide it. Because otherwise, when the page document found it the page demon is going to say, oh, is this one dirty, you know, if it's dirty. I need right out to the desk. Oh, there's no desk, then, then it's gonna it doesn't know what to do. 99 00:10:18.300 --> 00:10:19.170 Lalit Gupta: Okay. 100 00:10:20.250 --> 00:10:24.720 William Cheng: Well, I should be at that time. Maybe it will call clean page that hey, write it out to the desk, while in that case, what do you do 101 00:10:27.150 --> 00:10:28.110 Lalit Gupta: Nothing. 102 00:10:28.410 --> 00:10:34.110 William Cheng: Nothing. I can't really do that. Anyways, that's a little puzzle. People need to figure out what to do. Right. 103 00:10:35.700 --> 00:10:43.440 William Cheng: But nobody's talking about this in the class Google rule but i mean you know you. I mean, I cannot tell you what code right but your classmate can discuss how to solve this puzzle. 104 00:10:44.070 --> 00:10:44.700 Yeah. 105 00:10:46.800 --> 00:10:47.970 Lalit Gupta: No, actually what to right 106 00:10:48.900 --> 00:10:52.260 William Cheng: Yeah, yeah, I cannot say sorry 107 00:10:53.070 --> 00:10:57.540 Lalit Gupta: I think your work, you said is definitely helpful. 108 00:10:58.080 --> 00:11:03.900 William Cheng: All right. Yeah. So just, you know, just think about and you know some of the stuff will make sense. 109 00:11:05.490 --> 00:11:06.540 Lalit Gupta: Oh key. 110 00:11:12.840 --> 00:11:19.860 Lalit Gupta: And the Phoenix is such that we will never run out of memory, right. 111 00:11:20.370 --> 00:11:30.120 William Cheng: As far as I know, again, I don't, I don't know for sure that because I die that I didn't design this I didn't implement this, but I think with 256 megabytes of memory. 112 00:11:30.930 --> 00:11:44.970 William Cheng: I think you know if you are in Colonel three. There's a test called forkball right foreground supposed to run forever if it runs forever and nothing ever dies, then in and then eventually it's going to run out of memory. 113 00:11:46.440 --> 00:11:52.380 William Cheng: Okay, okay. But I think for bomb on you implemented correctly, then 114 00:11:52.890 --> 00:12:03.060 William Cheng: You know, it's going to keep creating child processes and then they, you know, I guess, all these policies, most of them is going to be dead. So, therefore, you get to clean up all the memory that occasion. You should never run out of memory. 115 00:12:04.260 --> 00:12:16.830 Lalit Gupta: Okay but consider this hypothetical scenario in which actually we keep on writing and writing and writing and forking and writing and 14 and writing and these are like a very long change and at some point. 116 00:12:18.840 --> 00:12:20.130 William Cheng: We're gonna run out of memory. Yeah. 117 00:12:21.030 --> 00:12:25.020 Lalit Gupta: Okay, this is a demon cannot you know because there's no backing store for the shadow on. Yeah, right. 118 00:12:25.320 --> 00:12:35.130 William Cheng: Okay, so therefore the page. I even cannot help and eventually going to run out of memory. Okay, so, so the I read the colonel FAQ, there is something called the 119 00:12:37.980 --> 00:12:39.210 William Cheng: Now I can't remember what it's called. 120 00:12:41.610 --> 00:12:44.340 William Cheng: Yeah, there's, there's a comment about something called a shadow demon 121 00:12:46.320 --> 00:12:50.970 William Cheng: Chateau de sh. A WD you can do a stream search as a 122 00:12:52.380 --> 00:12:56.400 Lalit Gupta: Consultant, I think in conflict. I remember there's a Chateau de something like 123 00:12:56.400 --> 00:13:00.030 William Cheng: This is a function called migrate okay so 124 00:13:00.390 --> 00:13:03.420 Lalit Gupta: You know, yeah. The function of migrating keyframe doxey yes 125 00:13:03.630 --> 00:13:08.160 William Cheng: Right, so I so I think we need that function is written for you already. 126 00:13:08.460 --> 00:13:09.120 Lalit Gupta: So to return. 127 00:13:09.480 --> 00:13:24.450 William Cheng: You just have to call it at the right time, because otherwise the chain of chatter object is going to go. It's going to go infinitely long and then eventually get into trouble. So therefore you should do that. You should actually shrink it if you don't, if you are preventable growing 128 00:13:25.920 --> 00:13:35.130 William Cheng: So, so if you get if you get the shadow. If you get to fork bomb and the only bug inside your kernel is that eventually will run out of memory. 129 00:13:36.270 --> 00:13:40.770 William Cheng: Then in that case that you know that that will be the bug that you have to deal with. 130 00:13:42.390 --> 00:13:44.970 William Cheng: But if you haven't got that far yet what, don't worry about it yet. 131 00:13:45.420 --> 00:13:47.310 Lalit Gupta: But we don't have to worry about shadow be right. 132 00:13:49.980 --> 00:14:03.120 William Cheng: Do saturday i think you know there are earlier version of the kind of source code from Brown University that you have to deal with the shadow. The thing I think the recent versions. I think they, you know, they, they, I think they they took care of it. 133 00:14:09.450 --> 00:14:16.650 William Cheng: Yeah, once in a while I get an update from Brown University, they say, Okay, here's the new new stuff and then there might be surprises in them or something. 134 00:14:33.930 --> 00:14:35.400 Just come on 135 00:14:40.380 --> 00:14:41.970 Lalit Gupta: Board. In the meantime, I'm just looking 136 00:14:45.060 --> 00:14:46.260 Hardik Mahipal Surana: Question professor. Good morning. 137 00:14:47.490 --> 00:14:54.120 Hardik Mahipal Surana: I actually wanted to know for phase two of Colonel three or do we really need to implement shadow objects because 138 00:14:54.660 --> 00:15:07.470 Hardik Mahipal Surana: In the weekend discussion video. You mentioned that shared objects are not only needed for phase two. But when you are running the code, we actually hit a point where some functions from shadowed see we're being called well 139 00:15:07.500 --> 00:15:10.260 William Cheng: Only the first one, only the, the, the net. 140 00:15:10.980 --> 00:15:15.360 William Cheng: Okay, so in there, but we know how to write in there, right, because that's the same for any 141 00:15:16.080 --> 00:15:16.440 Hardik Mahipal Surana: Yes. 142 00:15:16.740 --> 00:15:21.360 William Cheng: So that will be the one you have to implementing all the other ones, they will, you know, they will not get call 143 00:15:23.730 --> 00:15:24.030 Hardik Mahipal Surana: Okay. 144 00:15:25.830 --> 00:15:28.650 Hardik Mahipal Surana: Being called for some reason. And we couldn't figure out why that scene which 145 00:15:28.650 --> 00:15:30.660 Hardik Mahipal Surana: One shadow Phil page. 146 00:15:33.720 --> 00:15:36.810 William Cheng: You know, if you so so have you initialize whichever object. 147 00:15:38.310 --> 00:15:42.240 Hardik Mahipal Surana: So in the VM map underscore map function. 148 00:15:44.760 --> 00:15:57.270 Hardik Mahipal Surana: Basically fear initializing a shadow object. If the mapping is private. So, what I am doing what my team is doing is that we are checking if the mapping is private, and if it is, then we are creating a shadow object. 149 00:15:57.360 --> 00:15:58.860 William Cheng: Right, so don't don't don't do that. 150 00:16:01.050 --> 00:16:07.920 William Cheng: Right. Because if you are not implemented, let me go take a look of the colonel VM shadow that see 151 00:16:09.840 --> 00:16:17.820 William Cheng: Right. The first one over here. I think this function is called in an ID call all you know what one of the initialization function, right. So that's why you have to implement it. 152 00:16:18.510 --> 00:16:26.640 William Cheng: If you never return a shadow object right shadow create if you return. Now you should check the return value in return know then then don't create a shout out yet, right. 153 00:16:28.830 --> 00:16:39.240 Hardik Mahipal Surana: Correct. But so when we are mapping of part of the file into the address space and later on when we need to handle copy on write for the for can wait function. 154 00:16:40.140 --> 00:16:49.560 William Cheng: Right then, then you need to shout out your iPad at the beginning when you're doing. Hello, right, you still need to copy on write what you can do copy on write with the bottom of the. You don't need to shout out yet. 155 00:16:52.200 --> 00:16:54.690 Hardik Mahipal Surana: But isn't copyright always which shadow 156 00:16:55.890 --> 00:17:09.510 William Cheng: Is supposed to. Because once you know about shadow. It is a wise. Once you have the copy go into the shadow up there. But now you can actually go to the bottom object right he if the modification, going to the bottom of your last original data right 157 00:17:10.710 --> 00:17:13.860 William Cheng: But you don't need the original data anymore because because you don't have fork. 158 00:17:14.760 --> 00:17:15.150 Hardik Mahipal Surana: Correct. 159 00:17:15.420 --> 00:17:18.720 William Cheng: You're not sharing with anybody, so therefore it's your own private copy 160 00:17:19.800 --> 00:17:20.280 William Cheng: Okay, so 161 00:17:20.340 --> 00:17:22.680 Hardik Mahipal Surana: That could work only for getting face to turn 162 00:17:23.190 --> 00:17:26.310 William Cheng: That will that will only work until you get to fork. 163 00:17:27.120 --> 00:17:27.780 Hardik Mahipal Surana: Okay, okay. 164 00:17:27.810 --> 00:17:33.330 William Cheng: The first time you call for you have to implement shadow shadow object because you know you need to get forward to work with copy. All right. 165 00:17:34.590 --> 00:17:45.390 Hardik Mahipal Surana: Okay. And also we were hitting another bug relating to the loading of the file itself. So in the came in from in sorry 166 00:17:47.130 --> 00:17:51.090 Hardik Mahipal Surana: In gaming actually we call the kernel exec we eat function. 167 00:17:51.300 --> 00:17:59.760 Hardik Mahipal Surana: With a little bit low. So actually we were hitting and into an error in the bin FMT underscore Lord function. 168 00:18:00.120 --> 00:18:07.230 Hardik Mahipal Surana: So that is the function that actually goes and loads the address space into the it proc 169 00:18:09.030 --> 00:18:22.110 Hardik Mahipal Surana: In in in it processes outer space so that so we were actually using GDP to step through that. And what we found is we were able to create VM areas for the tech segment and the data plus BSS segment. 170 00:18:23.610 --> 00:18:32.730 Hardik Mahipal Surana: And we noticed a couple of things. First of all, we were getting the flags. So we use the colonel VM map mapping info GDP command. 171 00:18:34.410 --> 00:18:45.000 Hardik Mahipal Surana: It did that it printed to VM areas for us. So we stepped through the that load function. And that was actually going back into the underscore load function in elf 32 dot c 172 00:18:45.360 --> 00:18:45.750 William Cheng: Nice. 173 00:18:45.900 --> 00:18:57.000 Hardik Mahipal Surana: To that and we were able to create memories segments for the, I think. So we were able to create two segments. So I'm assuming that they were for the tech segment and the 174 00:18:57.360 --> 00:19:14.340 Hardik Mahipal Surana: Data plus BSS segment and when we were trying to create a memory segment for the stack. We were actually hating. And so it was the very end of the function there, we say that there is a comment which says that the now everything is done. We just need to send this to the user space. 175 00:19:15.990 --> 00:19:18.750 William Cheng: Okay, so let's see. 176 00:19:20.610 --> 00:19:23.490 William Cheng: It's called the VM map, map function. 177 00:19:26.250 --> 00:19:28.590 Hardik Mahipal Surana: Yes. So actually, if you could go 178 00:19:29.910 --> 00:19:31.890 William Cheng: Right here, it says allocate a stack right 179 00:19:32.850 --> 00:19:46.410 Hardik Mahipal Surana: Yes, yes. So we were able to do this. And then if you could come a little further down and towards the end of the function. So there was a comment which says now everything is done and we need just need to copy something back to the user space. 180 00:19:47.640 --> 00:19:48.510 William Cheng: Now every 181 00:19:49.230 --> 00:19:52.800 Hardik Mahipal Surana: Within the load function itself I think after we create the stack. 182 00:19:53.460 --> 00:19:56.970 William Cheng: OK, so now the return address will be fixed by the this 183 00:19:57.240 --> 00:19:58.560 Hardik Mahipal Surana: Before this, I feel 184 00:19:58.980 --> 00:19:59.730 William Cheng: Before this 185 00:20:00.360 --> 00:20:03.450 Hardik Mahipal Surana: It's very supposed to copy something you to the user space. 186 00:20:07.410 --> 00:20:08.280 William Cheng: You see here 187 00:20:10.200 --> 00:20:12.930 William Cheng: Okay, copying everything into the user space, right. 188 00:20:14.640 --> 00:20:26.370 Hardik Mahipal Surana: Yes, yes. So here what we are facing is that I see a sec. So we went into this function and we printed our pillow and we used a VM map. 189 00:20:26.790 --> 00:20:40.410 Hardik Mahipal Surana: We did a look up on the in the VM map to find the VM area in which we supposed to copy the information which starts in the address are below. So what we found is that like our VM area we're starting at 190 00:20:41.550 --> 00:21:00.930 Hardik Mahipal Surana: A VF N like 32840 and our glow was three to eight and 33 32399 so we were off by one. And because of that, we were not able to find the VM area. And that's why we sort of hit a case where we could not find the VM area. 191 00:21:01.740 --> 00:21:07.650 William Cheng: Okay, so that's what I just suggested, you know, in the class Google group you know today. 192 00:21:08.880 --> 00:21:10.920 William Cheng: You know, whenever you call BM 193 00:21:11.010 --> 00:21:11.940 William Cheng: Map function. 194 00:21:13.080 --> 00:21:13.500 William Cheng: Okay. 195 00:21:13.620 --> 00:21:21.540 William Cheng: So what I would do is that, you know, I was set a breakpoint like right here, right, or as you know I set a breakpoint right on this line. And before I call 196 00:21:22.500 --> 00:21:31.590 William Cheng: The VM app. I'm sure I will use the GDP command, you know, Colonel info VM and not being for current prod and the last argument will be using this map right 197 00:21:31.950 --> 00:21:38.550 William Cheng: It this way you print the address space. What does it look like before you call this VM app and also as soon as this function returns. So you just do a next 198 00:21:38.580 --> 00:21:44.160 William Cheng: When it goes to the next slide over here. Then again, you use the same command to say what is the I just have a look like afterwards. 199 00:21:44.550 --> 00:21:45.720 Hardik Mahipal Surana: Actually, we did do that. 200 00:21:48.000 --> 00:21:52.320 William Cheng: But you need to post it in the class Google group and ask other people, if that's what they're seeing 201 00:21:52.950 --> 00:21:53.790 Hardik Mahipal Surana: Oh, OK. OK. 202 00:21:53.880 --> 00:21:56.280 William Cheng: This way I can also comment on that. Right. 203 00:21:56.340 --> 00:21:58.470 William Cheng: Okay, I can I tell you what code right 204 00:21:58.710 --> 00:22:02.520 William Cheng: But if you show me the map. I can tell you that hey you know what it is. Look right or not. 205 00:22:04.650 --> 00:22:05.250 Hardik Mahipal Surana: Okay, sure. 206 00:22:05.730 --> 00:22:07.470 William Cheng: It is because, you know, if you only have 207 00:22:07.530 --> 00:22:09.630 William Cheng: A to memory segment or something wrong, right. 208 00:22:10.260 --> 00:22:13.680 Hardik Mahipal Surana: Correct, yeah. After this function is called we should have actually hard to memory segments. 209 00:22:13.710 --> 00:22:21.930 William Cheng: So you should do this for every VM map be a map related function VM M AP underscore something right over here. 210 00:22:22.590 --> 00:22:30.780 William Cheng: There's VMware find range. And then, I guess. Yeah, this is the only VMware function that's inside this function and this is an Elf. Elf 30 to load. 211 00:22:31.590 --> 00:22:40.440 William Cheng: There are other function over here inside elf 32 maps segment. Over here, over here, there's call BMI right here and then it will call the map right here. 212 00:22:40.740 --> 00:22:50.490 William Cheng: Okay, so, so again every time before you call the map you print the outer space, you know, for the first argument and then after the function return you print the outer space again and then we can see 213 00:22:50.520 --> 00:22:52.620 William Cheng: You know whether the address. They look correct or not. 214 00:22:55.320 --> 00:23:04.350 William Cheng: Okay, well, because I I think you're missing one of you know one of the VM map over here. And that's what it doesn't work. Okay. There's also they're doing something weird 215 00:23:04.890 --> 00:23:17.490 William Cheng: For the, the, the data plus BSS segment so often is that at the beginning, you know, you know the the data segment the psi them and there's no initial value. So the data segment come from the desk. 216 00:23:18.480 --> 00:23:23.400 William Cheng: Okay, no. Okay, so if you just map it from there does seem to memory. Why, in that case, you got, you know, 217 00:23:23.940 --> 00:23:30.180 William Cheng: In that case, it's kind of like a read only right just like tech segment. Well, you want to be able to modify your global variable. 218 00:23:30.690 --> 00:23:40.200 William Cheng: So I think the code instead of load over here. That is something funny. The cop. The, the mapping to address space and then what it will do is that they will take the memory segment and they will replace it with the new one. 219 00:23:41.280 --> 00:23:52.200 William Cheng: You know, bye bye bye bye managing and using anonymous object, okay, because we need to do copy on. Right, right. So therefore you cannot use the the demo VJ inside the inside the vino 220 00:23:52.800 --> 00:24:01.290 William Cheng: Okay, so all that code is done somewhere over here again can see the code is very, very complicated over here. So, so maybe you're not doing that process. You lost a memory segment. 221 00:24:03.360 --> 00:24:04.290 Hardik Mahipal Surana: Oh, okay. 222 00:24:04.620 --> 00:24:14.700 William Cheng: I don't know if this is happening in your code, good, but I've seen people that you know when when they finish the loader. They the memory segment looks wrong. 223 00:24:16.560 --> 00:24:29.730 William Cheng: Okay, so, so, so the ways I think the best way is that you you post it in the Google group or your GDP print out know for those property address space and then everybody can look at it to see, you know, if it makes sense or not. 224 00:24:31.860 --> 00:24:40.710 Hardik Mahipal Surana: Okay, so can you help me understand after the just load function completes, how many segments are we supposed to what is expected number three. 225 00:24:42.060 --> 00:24:50.010 William Cheng: Again, this is a reasonable thing to post to the Glass, Google group right but he's definitely the tech segment you need the data plus BSS you need to have a stack. 226 00:24:51.030 --> 00:24:52.590 William Cheng: You know, so those are the one you have to have 227 00:24:53.850 --> 00:25:06.900 William Cheng: That because in order for you to run the hello program. You don't need to heap segment right you don't have memory map file. So, you know, tax data plus BSS and you know and stack. Those are the minimum that you need. Right. 228 00:25:09.240 --> 00:25:09.570 Okay. 229 00:25:11.850 --> 00:25:17.250 William Cheng: So again, it's important to post in the group. So everybody can comment and then we can actually see that 230 00:25:17.760 --> 00:25:18.870 Hardik Mahipal Surana: Sure I'll definitely do that. 231 00:25:18.900 --> 00:25:26.670 William Cheng: Yeah, because I think a lot of people are stuck, but they don't share anything, you know, in the class move so they're missing an opportunity for people to help each other. 232 00:25:30.750 --> 00:25:32.340 Hardik Mahipal Surana: Okay sure that I've been through that. 233 00:25:32.550 --> 00:25:32.940 Okay. 234 00:25:34.020 --> 00:25:34.230 William Cheng: Yeah. 235 00:25:34.260 --> 00:25:35.490 William Cheng: Good as early as possible. 236 00:25:36.150 --> 00:25:43.140 Hardik Mahipal Surana: Sure. Another thing I noticed is that the two memory segments that that get created when we load this program. 237 00:25:43.650 --> 00:25:51.060 Hardik Mahipal Surana: One has read and execute permission and it has private mapping and the second one has read right permission and has again private mapping 238 00:25:51.570 --> 00:26:04.200 Hardik Mahipal Surana: So I was a little confused because the tech segment is supposed to be shared and read only. But I see that it has a Rx flag protection bits and mapping the flags is set as private 239 00:26:04.980 --> 00:26:08.400 William Cheng: Right so private means that you didn't copy on. Right, right. 240 00:26:09.420 --> 00:26:14.700 William Cheng: But this is read only. Never. We never right into as it doesn't hurt. 241 00:26:16.170 --> 00:26:21.120 Hardik Mahipal Surana: Exactly. But if this is tech segment, shouldn't it will just read only and share 242 00:26:21.720 --> 00:26:28.050 William Cheng: Well, I don't know why Brown University people write the code. This way they are the expert assume they know what they're doing. 243 00:26:29.130 --> 00:26:29.430 Hardik Mahipal Surana: Okay. 244 00:26:30.000 --> 00:26:31.170 William Cheng: Why, because it doesn't hurt right 245 00:26:32.190 --> 00:26:32.940 Hardik Mahipal Surana: Okay, yeah, sure. 246 00:26:33.300 --> 00:26:42.360 William Cheng: So maybe they tried to do this, making to make things look more uniform. I think lecture, I have a slide to say that you can actually stick a shadow object in there because it says is private. 247 00:26:43.260 --> 00:26:47.520 William Cheng: Right, but since you you never supposed to write into your tech segment. So therefore you should be OK. 248 00:26:49.350 --> 00:26:49.770 I see. 249 00:26:51.390 --> 00:26:59.280 William Cheng: I think in the lecture, I tried to, you know, be very specific. I say a memory segment is copy on write if it's private. And if it's rewrite 250 00:26:59.700 --> 00:27:00.090 Hardik Mahipal Surana: Yes. 251 00:27:00.360 --> 00:27:07.380 William Cheng: Right. So if it's a read only and private. Well, then in that case if you know that you're really not doing copyright right 252 00:27:09.120 --> 00:27:09.420 Right. 253 00:27:12.540 --> 00:27:25.200 Hardik Mahipal Surana: Yeah, so I had one more doubt. So if you're actually trying to read or write into of a mayor or memories that segment which has the visitor for copy on write basically it has rewrite and private setup. 254 00:27:25.920 --> 00:27:27.420 Hardik Mahipal Surana: And let's say we get a page fault. 255 00:27:28.230 --> 00:27:35.100 Hardik Mahipal Surana: In that case, checking about the mapping and doing all of the things that you have mentioned in the lecture. 256 00:27:36.180 --> 00:27:41.970 Hardik Mahipal Surana: Basically says setting the read write access, creating a copy copying the data from one page to another and then 257 00:27:42.330 --> 00:27:52.020 Hardik Mahipal Surana: Updating the page table entries. All of that stuff. Is that supposed to happen within the shadow look up page and fill page functions or some part of what's supposed to be done inside the page for itself. 258 00:27:53.160 --> 00:28:08.730 William Cheng: Well, that's part of your handle page ball right this is this is Colonel VM page. All right. Okay, this one. There's only one function. Right. Okay, so, so, so they all started off from here I handle page fault. Okay, so I 259 00:28:10.110 --> 00:28:12.090 William Cheng: Had a patient, you have to do all the stuff you just mentioned. 260 00:28:15.570 --> 00:28:15.990 Hardik Mahipal Surana: Yes. 261 00:28:16.260 --> 00:28:27.150 William Cheng: Okay, so what you would do is that you first you walk down that list of VM area, find out which memory segment it belongs to, and then see if you're going to kill the user space program or not. If you don't kill the users based program. 262 00:28:27.600 --> 00:28:33.750 William Cheng: That means that there's a way to fix it. Okay, if it turns out it's copy on write what at that point you need is a sort of perform all this copy. All right. 263 00:28:36.330 --> 00:28:37.440 Hardik Mahipal Surana: Okay, so 264 00:28:38.250 --> 00:28:39.690 William Cheng: They also added this function. 265 00:28:40.590 --> 00:28:44.340 Hardik Mahipal Surana: For the pieces for the steps that we need to do for copyright 266 00:28:45.360 --> 00:28:54.840 Hardik Mahipal Surana: Is it, are these pieces split between like are some pieces done by the page for handle page for function and other pieces done by the shadow functions. 267 00:28:55.890 --> 00:29:02.910 William Cheng: Well, the page ball handler at the pace will handle over here is the one that will call the function inside the shadow object. 268 00:29:03.000 --> 00:29:03.810 Hardik Mahipal Surana: Yes, yes. 269 00:29:04.800 --> 00:29:08.040 William Cheng: Right, so, so everything started out over here and then 270 00:29:08.220 --> 00:29:17.340 William Cheng: You know, if it turns out it's not a, you know, it's not a private member segment and it needs to use some other object. Right, so, so, so all the codes are started out started off from here I to to to to fix the page all 271 00:29:17.640 --> 00:29:26.010 William Cheng: Right, so why don't you do all that copy on write all the patient my setup. The last thing that you do is to change the table entry right that's the function PT map over here. 272 00:29:26.610 --> 00:29:27.000 Hardik Mahipal Surana: Yes. 273 00:29:27.120 --> 00:29:31.860 William Cheng: There's a bunch of PT map. Okay so PT map is basically the last thing that you have to do. 274 00:29:32.790 --> 00:29:46.050 William Cheng: And to to set up a stable entry. And then when you return from Hannah paintball, you're going to go back into the user space program and the user space. Well, I'm going to try again. And, you know, and hopefully you're not gonna, you're not going to get another page right 275 00:29:47.190 --> 00:29:47.850 William Cheng: On this page, 276 00:29:49.200 --> 00:29:49.470 Hardik Mahipal Surana: Agree. 277 00:29:53.070 --> 00:29:54.420 Hardik Mahipal Surana: I agree to the fact that 278 00:29:55.560 --> 00:30:04.620 Hardik Mahipal Surana: The shadow functions do it called from here and we do the necessary checks to identify whether this is something that requires the shadow of jet or not based on copyright or not copy and they 279 00:30:04.920 --> 00:30:13.950 William Cheng: Were so the basic logic over here. Right. Is there anything you want on the list of VM area, find out which VM area belongs to write and inside the VM era, there's a link list. 280 00:30:14.220 --> 00:30:26.460 William Cheng: Of shadow object at the end, there's a bottom object right here. So what you do is that you need to go to that list and then find the right page rank. Okay. So will you try to say I want to find the right page right well that include copy on. Right, right. 281 00:30:27.960 --> 00:30:33.270 William Cheng: Yes. Yes. Right. Because if you're supposed to do copy on write, then the patient that you find should be the one that's copied. 282 00:30:34.410 --> 00:30:34.770 William Cheng: But, but 283 00:30:36.180 --> 00:30:41.640 William Cheng: Now it's private. Right, so that should be the one that that patient with that. That should be the one I get return 284 00:30:46.500 --> 00:30:47.220 Okay, okay. 285 00:30:48.420 --> 00:30:56.730 William Cheng: Right. I mean, at a high level, the concept is is very simple. Right. You go to that VM area, you get the page frame one. How do you get the patient was complicated 286 00:30:58.890 --> 00:30:59.490 Hardik Mahipal Surana: Yes. 287 00:30:59.850 --> 00:31:00.330 Okay. 288 00:31:01.860 --> 00:31:07.230 William Cheng: Robin, the high level idea is that, you know, you just get the page RAM and you let all the other code take care of itself. Right. 289 00:31:09.450 --> 00:31:12.120 Hardik Mahipal Surana: Yeah, so I had one more question regarding op Jacob. 290 00:31:13.200 --> 00:31:22.620 Hardik Mahipal Surana: So if we were to just look at that object dump and then figure out what the actual VM areas are supposed to look like is there a way for us to do that. 291 00:31:24.600 --> 00:31:30.210 Hardik Mahipal Surana: I'm looking at the addresses and figuring out what the ranges of the VM areas should be 292 00:31:30.870 --> 00:31:40.140 William Cheng: Yeah, because you know like like even the first thing confuses me, you know, because the, you know, they have a we do the object. Damn. There's a memory segment called read only data. 293 00:31:41.130 --> 00:31:49.230 William Cheng: Okay, that our own data. So I think what we need does is that it combine that together with the text segments to make it into one segment. 294 00:31:50.310 --> 00:32:03.600 William Cheng: Okay, so I don't really know you know exactly what the winnings loader is doing. But, you know, if it's combining one segment. What does it do with the other segments and where do they come from. I think it's quite difficult to figure that out. 295 00:32:05.700 --> 00:32:17.130 William Cheng: Okay, so that that's why you know I I sort of mentioned that we should just trust that all the CO coming from Brian University. They're all perfect they know what they're doing. And then we just need to get our function. So work. 296 00:32:19.110 --> 00:32:19.800 Yes, yes. 297 00:32:22.860 --> 00:32:33.480 Hardik Mahipal Surana: Okay, so I had one last question. You mentioned that there's a good process good chance that we might face these off by one errors in the VM map functions. Right. 298 00:32:34.110 --> 00:32:52.320 Hardik Mahipal Surana: Here off by one where like if you're comparing the start VF N and the end VF N, which he started sending a notice of the VM area and four functions like his range empty or find range or remove, we need to do a lot of comparisons between a given address 299 00:32:53.340 --> 00:32:58.410 Hardik Mahipal Surana: Given starting address and ending address and the start and end of the of the VM area. 300 00:32:58.740 --> 00:32:59.820 William Cheng: Okay, so 301 00:33:00.030 --> 00:33:01.290 Hardik Mahipal Surana: In these functions. 302 00:33:02.520 --> 00:33:04.800 Hardik Mahipal Surana: What would be a good way for us to validate whether 303 00:33:05.910 --> 00:33:10.020 Hardik Mahipal Surana: You know, we have used the right comparisons between the addresses. 304 00:33:10.050 --> 00:33:16.290 William Cheng: Well, so, so the interval, always the left side is closed and the right side is open, right. You just need. You just need to be very careful. Right. 305 00:33:16.650 --> 00:33:24.000 William Cheng: I mean, some people, I think that what it is that they have, they have a team of, you know, for students, three of them think one way, one of them think. Either way they're going to be in trouble. 306 00:33:25.200 --> 00:33:27.360 William Cheng: Yes, you got it. You got to talk to each other. 307 00:33:29.700 --> 00:33:36.840 Hardik Mahipal Surana: I agree. We've been doing that and like we we aren't able to get our head around one place on how it's supposed to be. 308 00:33:37.290 --> 00:33:45.600 William Cheng: Right, so, so again, one thing that you should do is that you can post in the class, Google, this is what I address based look why we found this thing here. Does that make sense. You know, it started discussion. 309 00:33:46.950 --> 00:33:53.340 William Cheng: Okay, sure. Right. Because, you know, if I see message like that if its reasonable for me to answer. I will also answer that right 310 00:33:54.960 --> 00:33:55.560 Hardik Mahipal Surana: Okay, okay. 311 00:33:57.960 --> 00:34:00.690 William Cheng: Now, because if I don't see any questions. I mean, how 312 00:34:02.940 --> 00:34:04.470 William Cheng: Do I start a conversation 313 00:34:05.940 --> 00:34:06.600 William Cheng: It's difficult. 314 00:34:09.750 --> 00:34:10.830 Hardik Mahipal Surana: Sure, definitely do that. 315 00:34:11.190 --> 00:34:12.150 William Cheng: Thank you. So please. Yeah. 316 00:34:22.380 --> 00:34:31.020 Lalit Gupta: I have a question on this block. Can you talk about like what blocking means and things like that as something as something blocks. 317 00:34:32.100 --> 00:34:34.890 Lalit Gupta: For instance, we have some operation and this will block. What does it mean 318 00:34:35.280 --> 00:34:45.300 William Cheng: Yeah, that means that you know so so you could call a function right you're calling the function using a colonel threat right there's kind of a fall asleep, waiting for something that's called blocking 319 00:34:50.220 --> 00:34:57.840 William Cheng: Remember the, the, the state transition diagram for threat right you started out in the running state, you can go into a waiting state or the blocking state. 320 00:34:59.190 --> 00:35:02.940 William Cheng: So that means that you're waiting permutations, you're waiting for it. Oh, you're waiting for something, right. 321 00:35:04.830 --> 00:35:11.880 Lalit Gupta: Okay, so then we are blocking. We actually are not running some from someone else's running. And at some point, that some operation will be finished. And we will 322 00:35:13.770 --> 00:35:20.490 William Cheng: Go to sleep right at some point somebody is going to change your state into the renewables day bye bye bye picking you up from from wherever you are. 323 00:35:20.730 --> 00:35:24.750 William Cheng: Moving into the run queue and then you wait for your chance to start running out of CPU. Yeah. 324 00:35:31.530 --> 00:35:37.920 William Cheng: Yeah, so if you simply give up the CPU add yourself to the rank you you are not in a blocking state you're you know you're in a reasonable state. 325 00:35:42.870 --> 00:35:43.080 Oh, 326 00:35:46.290 --> 00:35:46.650 Lalit Gupta: And 327 00:35:48.690 --> 00:35:52.950 Lalit Gupta: What's the difference between the page 14 Colonel one in color too because we 328 00:35:55.050 --> 00:35:59.880 Lalit Gupta: One can get to a fault in Colonel 102 by two. And what's the difference between the page for editing Colonel three 329 00:36:00.780 --> 00:36:12.150 William Cheng: Wow, so, so, so kind of one into the distance, there is no user space program, the only kind of pace or you can get as a colonel baseball right and Colonel baseball is a kernel panic. So therefore, you're kind of crashed. 330 00:36:12.840 --> 00:36:16.620 William Cheng: Okay and Colonel three, there are two kinds of pace while you can get a user space page wall. 331 00:36:16.950 --> 00:36:25.170 William Cheng: Or Colonel page for the colonel peaceful and kernels, who is the same as current one and twos. Colonel page fall. You're not supposed to get a colonel patient, you're, you're never supposed to get a cardinal baseball 332 00:36:26.190 --> 00:36:32.190 William Cheng: Okay, so therefore in Canarsie. There's also a user space page up have a page fall. So when there's a user space page, you should get here. 333 00:36:36.480 --> 00:36:42.000 William Cheng: Well as you can actually look for the code over here. So let's say that I'm going to do a graph right grab handle baseball 334 00:36:43.170 --> 00:36:49.680 William Cheng: Star that see Colonel mm page table does see 335 00:36:52.530 --> 00:36:59.220 William Cheng: Where, so this is in the pristine corner. So this is the only place that it calls the you know the handle baseball 336 00:36:59.880 --> 00:37:02.580 William Cheng: So we here. So this is the page ball handler. Right. 337 00:37:03.060 --> 00:37:08.580 William Cheng: That comes in over here. So what does it do, is that he checked the cause, to see if the cause is a user page fall 338 00:37:08.820 --> 00:37:14.670 William Cheng: It was a user space page. Well, then in that case it called a page or handler, because you're you're supposed to handle the paywall 339 00:37:15.090 --> 00:37:27.180 William Cheng: If it turns out the user ID is not said that means that it's a colonel page fall they nutcase it cause a kernel panic right so this is the Colonel, one and two kind of went into the always always get here, Colonel. So you can get here if we get a colonel page far 340 00:37:29.310 --> 00:37:42.810 Lalit Gupta: And wide and why does this function, underscore, underscore fault underscore handler is called like what's what could be the one of the reason that this should be called 341 00:37:43.230 --> 00:37:47.250 William Cheng: You know V zero you try to write to a read only. No. 342 00:37:47.610 --> 00:37:49.920 Lalit Gupta: No in the in the in the cardinal one into 343 00:37:51.600 --> 00:37:57.750 William Cheng: Including one and two, you know, because the for the pace table, the top, you know, the top 344 00:37:58.230 --> 00:38:11.250 William Cheng: Three quarters are not being used. Right. So the top one quarter, they're all equal to zero then the bottom part over here is going to be used by the Colonel. So if you try to access memory location, the user space one in this case, again, you're gonna you're gonna be here. 345 00:38:13.080 --> 00:38:26.400 Lalit Gupta: Okay, so, so I think this one is because I remember this one because this is the that happens when we, when we do some record. Another thing is when you do recursive thing and the Stack Overflow, then I think this is quiet because we are actually. Oh. 346 00:38:26.610 --> 00:38:38.970 William Cheng: Yeah, so I don't, I don't know, where does it go when the stack overflows, you know, because this, this page far I think some people actually use that term yesterday in the class Google group. They call it the mm you interrupt. 347 00:38:40.290 --> 00:38:52.500 William Cheng: So when MMU when they have a new detect a fault right because we go to zero because you had to write to a read only. Things like that. So, in that case it will generate a hardware interrupt. So this is the interrupt handler for, you know, for the MMU fault. 348 00:38:55.560 --> 00:38:57.150 William Cheng: Okay, so it's kind of like a hardware interrupt. 349 00:39:03.540 --> 00:39:06.540 Lalit Gupta: And vendors. This. Mm. Your fault renders me you 350 00:39:07.560 --> 00:39:08.730 Lalit Gupta: Try to do a fault. 351 00:39:09.330 --> 00:39:12.480 William Cheng: Yeah, when you perform address translation. Now you try to convert a virtual 352 00:39:13.530 --> 00:39:18.360 William Cheng: virtual address to a physical address. So you can do that for the colonel and also for the user space program. Right. 353 00:39:18.630 --> 00:39:30.960 William Cheng: So we can probably address translation, if it turns out the page table entry is invalid because we go to zero or you try to write to a read only page. So in that case, you know, you end up getting this interrupt. 354 00:39:34.050 --> 00:39:52.140 Lalit Gupta: Key in the FAQ, I think you mentioned, like how to how to fix the page fault. And so, in, in some cases, it is possible to actually figure out at which, at what at what place. Actually, the page fault occur and sometimes it 355 00:39:52.290 --> 00:40:02.520 William Cheng: So, okay. So this is, you know, when a call I know. Baseball is going to come with the DDR right so VAD tell you which virtual address is the one that caused the page, while during address translation. 356 00:40:03.870 --> 00:40:14.160 William Cheng: Okay. So, therefore, you know, that why you know has a corresponding page table entry. That means that the page table entry over there has something that's incompatible and that that that's the table. Enter, you have to fix. 357 00:40:16.050 --> 00:40:30.030 Lalit Gupta: Okay, but sometimes it is not possible. Like sometimes some sometimes it gets Douglas, the place where the page for the function or it can, but sometimes it just couldn't find the place where pitch world. 358 00:40:30.120 --> 00:40:38.430 William Cheng: Well, forget, for example, right. You be add or equal to zero, right. So if you're using a space program, try to access memory location zero. Well, then in that case you have to kill the user space program. 359 00:40:40.230 --> 00:40:43.650 William Cheng: Right. So, therefore, in that case this handle page should not return 360 00:40:46.740 --> 00:40:48.150 Lalit Gupta: Okay. Oh, so it's okay. 361 00:40:48.210 --> 00:40:48.780 Lalit Gupta: So when 362 00:40:48.900 --> 00:40:55.320 William Cheng: He returned to us. We're gonna try again. Right. If it's access the memory location zero then then there shouldn't try again. 363 00:40:56.760 --> 00:41:02.790 Lalit Gupta: Okay, so if the really the idea is corrupted. Then he can't even figure out where the page for a 364 00:41:03.270 --> 00:41:15.840 William Cheng: While so will you will. Yeah. So, so this is the VAD Dr. So can you try, you try to walk down that linear list of VM area. Okay, if it turns out this the DVR is in the gap. Well, that means that you have to kill the user space program. Right. 365 00:41:19.200 --> 00:41:25.230 William Cheng: Okay, if it's within a within a VM area. What that means that there is a way for you to fix it. Hopefully, 366 00:41:27.570 --> 00:41:35.940 William Cheng: Good. But this now within the VM area I want in that case it clearly like memory location zero. It's not inside the VM area. Well, then in that case, you'll kill the program. 367 00:41:38.970 --> 00:41:40.500 William Cheng: And then that that's a segmentation call 368 00:41:41.490 --> 00:41:57.390 Lalit Gupta: Yes, definitely understand trying to like make sense of like why it's why sometimes, it, the, the method you described with the FAQ, and he actually figure out where the pitch, what has occurred, and why, in some cases, it can't tell you where to pitch, what has occurred. 369 00:41:58.470 --> 00:42:01.080 William Cheng: When you get a paper, paper right at the DDR 370 00:42:04.350 --> 00:42:15.900 William Cheng: The hardware knows exactly where be a DDR is right over here and over here. It says, you know, move car to register so car to register, I guess, according to this code is the page fall dress. 371 00:42:17.580 --> 00:42:32.220 William Cheng: Okay, okay. So, therefore, what it does is that it copied his value into, you know, this local variable called the DDR right and then it passes to handle baseball. So now you know this is the the virtual address that caused the page ball. So go ahead and fix it, right. 372 00:42:34.230 --> 00:42:37.860 William Cheng: And if it's unfixable then you do something about it. Yeah. 373 00:42:40.170 --> 00:42:41.190 William Cheng: Go key. 374 00:43:02.700 --> 00:43:04.440 Lalit Gupta: Can you go to this lecture 16 slide. 375 00:43:04.440 --> 00:43:13.680 2016 376 00:43:15.360 --> 00:43:16.170 Lalit Gupta: Your quantities. 377 00:43:27.300 --> 00:43:27.870 William Cheng: This one. 378 00:43:29.880 --> 00:43:30.600 Lalit Gupta: Quantity. 379 00:43:30.690 --> 00:43:32.040 Two 323 380 00:43:35.010 --> 00:43:35.670 William Cheng: This one. 381 00:43:35.820 --> 00:43:41.250 Lalit Gupta: Yes, so why there's a gap between this step one, step two, step three, like this. 382 00:43:42.330 --> 00:43:47.790 William Cheng: Probably knows space, you know, I just draw that way, doesn't it doesn't really matter. I mean, the, you know, 383 00:43:49.320 --> 00:43:52.560 Lalit Gupta: But it would be like overlapping make for for one function. 384 00:43:53.580 --> 00:43:54.030 Lalit Gupta: Packages 385 00:43:54.150 --> 00:43:56.250 William Cheng: On another memories that one can never overlap. 386 00:43:58.200 --> 00:44:00.930 Lalit Gupta: No, I don't think the SEC one sec, one sec to instruct tree. 387 00:44:01.500 --> 00:44:03.120 William Cheng: Right. They can be right next to each other. 388 00:44:03.810 --> 00:44:09.690 William Cheng: Okay, just like text and data and be there right next to each other. The there can be gaps. 389 00:44:10.740 --> 00:44:12.870 William Cheng: Okay, but that they can overlap. 390 00:44:15.300 --> 00:44:22.020 Lalit Gupta: Okay. And where does the heat comes from the reversal order of the heap in this one. 391 00:44:23.160 --> 00:44:28.860 William Cheng: Well, again, the compiler decides, right. So the heat. Typically, you know, the heat typically goes right here. Right. 392 00:44:30.690 --> 00:44:45.060 William Cheng: Okay, okay, actually for our Colonel Simon the heap starts at the end of the BSS segment over here at this picture says BSS a dynamic. So typically we say be data plus BSS right here. So here's the dynamics, like that. 393 00:44:47.520 --> 00:44:49.230 Lalit Gupta: Oh ok dynamic 394 00:44:49.740 --> 00:44:56.640 William Cheng: Right, so I think I have a typo right here because the dynamic, you know, if you don't call Malik and free. You don't need a dynamic region right so in that case it doesn't have to exist. 395 00:44:59.130 --> 00:45:14.370 William Cheng: Okay, so, so in the Linux kernel the dynamic region starts at the end of the BSS segment. So if data plus BSS if it's not multiple have, you know, a full four kilobytes. So in that case, the dynamic region. Start in the middle of a pain. 396 00:45:15.390 --> 00:45:18.510 William Cheng: Starts in the middle of the page rank. So it's kind of weird. 397 00:45:21.030 --> 00:45:23.010 Lalit Gupta: Can you just you just one more time. 398 00:45:23.730 --> 00:45:34.500 William Cheng: Yeah. So let's say that you know we have a patient like this, right. So, so this is you know data plus BSS right so what if data plus BSS is only one kilobytes in size, right. So here's one kilobyte over here, right. 399 00:45:34.710 --> 00:45:40.620 William Cheng: And this entire data structure over here is what kilobytes. Yes. So in that case, your dynamic region starts right here. 400 00:45:41.400 --> 00:45:42.600 Lalit Gupta: What why 401 00:45:43.890 --> 00:45:45.060 William Cheng: It's an internal FAQ 402 00:45:46.800 --> 00:45:53.010 Lalit Gupta: You actually i i actually looking into this rubric and it's actually mentioned that, that this 403 00:45:54.300 --> 00:45:55.740 Lalit Gupta: That this page. 404 00:45:56.760 --> 00:45:57.090 Lalit Gupta: This 405 00:45:59.040 --> 00:46:00.750 Lalit Gupta: Page Break in the rock. 406 00:46:01.260 --> 00:46:07.800 William Cheng: Right at the end of this is called the process break why this is the br k, right. This is the end is over here so you can actually change it. 407 00:46:08.670 --> 00:46:10.440 Lalit Gupta: Yeah, and also 408 00:46:10.860 --> 00:46:14.370 William Cheng: Like what the star Greg is always at the end of the BSS segment. 409 00:46:15.990 --> 00:46:17.940 William Cheng: So the star break is not page aligned 410 00:46:24.210 --> 00:46:26.070 Lalit Gupta: Why did you select to do that like 411 00:46:26.580 --> 00:46:29.370 William Cheng: I don't know i again i did is i mean exactly 412 00:46:30.300 --> 00:46:31.920 Lalit Gupta: makes things more complicated. 413 00:46:32.580 --> 00:46:33.390 William Cheng: I don't know. 414 00:46:36.420 --> 00:46:40.350 William Cheng: Maybe that's how it's done in you know all the units and the Linux operating system. 415 00:46:41.520 --> 00:46:41.970 Lalit Gupta: Okay. 416 00:46:44.460 --> 00:46:58.800 William Cheng: I mean, you know, in the good old days memory is very, very precious you want to save as much memory as possible. So, you know, wasting memory instead of four kilobytes. I mean, in the good old days every, every page is happy kilobyte right so they're trying to sort of minimize internal fragmentation. 417 00:47:01.290 --> 00:47:04.170 Lalit Gupta: Okay, so is this dynamic dynamic region. 418 00:47:06.510 --> 00:47:08.370 Lalit Gupta: Read, write and private 419 00:47:09.150 --> 00:47:09.930 William Cheng: Well, yes. Yeah. 420 00:47:12.690 --> 00:47:14.880 Lalit Gupta: So then what about what about this data and 421 00:47:15.120 --> 00:47:17.640 Lalit Gupta: The second segment is this Detroit and private 422 00:47:18.180 --> 00:47:19.830 William Cheng: Yes, right. 423 00:47:20.190 --> 00:47:23.640 William Cheng: And again, again, the data segment is funny because originally the comp on the desk. 424 00:47:24.180 --> 00:47:31.860 William Cheng: Okay, so first we map the data from the test into memory and then we replace it with the private you know memory segment. 425 00:47:35.760 --> 00:47:42.030 William Cheng: Right at the beginning. It's kind of like read only. Right. You know, because the data over here contained global variable. But you want to make make make them into private 426 00:47:42.300 --> 00:47:51.420 William Cheng: So the way that's done in weeks is that you map into memory. So you can actually copy the data and then you switch the memory segue into into the one that's backed by the anonymous object. 427 00:47:52.530 --> 00:47:53.850 William Cheng: Because you want to do copy on write 428 00:48:09.480 --> 00:48:14.880 William Cheng: But again, you know, if you asked me, why did they do it that way. I don't know. That's how it's done. 429 00:48:17.550 --> 00:48:20.670 Lalit Gupta: Yeah, so when I'm not even that this is what this actually 430 00:48:24.630 --> 00:48:34.440 Lalit Gupta: Does a hypothetical question. Will. Will this strategy work if. Both. Both. Both. The, the data was BSS and the dynamic has different 431 00:48:35.640 --> 00:48:40.350 Lalit Gupta: Permissions like one is only one is read on, let's say data plus pieces are read only. 432 00:48:41.820 --> 00:48:43.170 William Cheng: The programming model. 433 00:48:43.500 --> 00:48:54.180 William Cheng: Why I mean you know that that we have learned for all the programming language, they all have the same thing, right, you know, the data plus B says it was the copy on write the dynamics of the copyright the stack supposed to be happy. All right. 434 00:48:55.830 --> 00:49:03.690 William Cheng: So as on until one day somebody actually completely change the programming model so far, you know, the others pretty good approach that seems to work. 435 00:49:10.830 --> 00:49:15.810 Lalit Gupta: And I think there's some, I think there's some point, you were saying, that's this big can increase or decrease 436 00:49:17.340 --> 00:49:18.750 William Cheng: Or increase or decrease this 437 00:49:19.110 --> 00:49:21.330 Lalit Gupta: Just break this VR ke 438 00:49:22.050 --> 00:49:31.650 William Cheng: Y. So the big A CAN CAN CAN CAN GO BACK TO, YOU KNOW, where's the star break. By the way, again, that's the end of the PSS that man so that part can never change. 439 00:49:33.840 --> 00:49:36.810 William Cheng: Right so PR the PR cake, and I should go all the way to the to the beginning. 440 00:49:39.450 --> 00:49:41.130 Lalit Gupta: There's like a relic does that 441 00:49:42.240 --> 00:49:47.670 William Cheng: I don't think anybody would do that. Right. But this is this your heat right you have a heat, we feel calling Malcolm free 442 00:49:47.880 --> 00:49:54.750 William Cheng: If you're calling Malik I'm free. Well, then you need memory. So, you know, even though it can happen. It doesn't make sense that it will ever happen. 443 00:49:55.680 --> 00:50:03.060 Lalit Gupta: Why, because let's say I do Malik Malik Malik continuously says that I am reached the end of the break should or shouldn't that 444 00:50:04.140 --> 00:50:07.560 Lalit Gupta: Like at some point, increase, increase the uptake. 445 00:50:08.220 --> 00:50:19.380 William Cheng: Yeah, so, so, so you will increase the break right but you probably going to do it much, much earlier. Right. You can't really wait until you run out of brave because at that time, you're gonna get a segmentation fall and the opposite is going to kill your program. So it'll be too late. 446 00:50:22.470 --> 00:50:28.860 Lalit Gupta: Why, why, because I have. I have. I have a gap that is the difference. I have, I have 447 00:50:30.360 --> 00:50:33.810 Lalit Gupta: A gap available. That is the great minus to start break 448 00:50:34.830 --> 00:50:38.790 William Cheng: If this is your, this is your heat memory. Uh huh. 449 00:50:39.030 --> 00:50:46.200 William Cheng: Okay, the heat memory. You gonna give it to the first member member alligator to allocate so at some point the First Amendment allocate is gonna say I'm out of memory. 450 00:50:47.580 --> 00:50:54.060 William Cheng: Okay. So supposedly one thing they should do at that point is to increase the break over here to be larger. What if you can do it. 451 00:50:56.460 --> 00:51:00.000 Lalit Gupta: Yeah, then you have to kill the program probably 452 00:51:01.200 --> 00:51:03.990 William Cheng: You know i mean i think i think i think 453 00:51:05.250 --> 00:51:09.060 Lalit Gupta: It should be actually kind of turn on that we don't have any memory. 454 00:51:10.170 --> 00:51:14.550 William Cheng: Right then they'll, then what is the problem. Gonna do you try to allocate memory. There's no memory. 455 00:51:20.400 --> 00:51:24.930 William Cheng: When you put a message to tell the tell the user that the amount of memory. Look, what can you do 456 00:51:25.980 --> 00:51:26.580 William Cheng: Yes. 457 00:51:26.940 --> 00:51:35.640 Lalit Gupta: But should we also die either, but that should we know that would be very right. Like, if we have no memory and we say, okay, you have no memory and that seems very bad. 458 00:51:37.260 --> 00:51:38.430 William Cheng: Not dependent upon your point of view. 459 00:51:41.100 --> 00:51:42.930 William Cheng: Depends on what your program is right. 460 00:51:43.830 --> 00:51:46.890 William Cheng: For the banking application they use a while, probably not. 461 00:51:49.170 --> 00:51:53.640 Lalit Gupta: Okay. Works. Works, the worst model for this genomics. 462 00:51:54.780 --> 00:51:56.880 Lalit Gupta: What is the point of view of Unix 463 00:51:57.150 --> 00:51:58.020 William Cheng: That should never happen. 464 00:51:59.970 --> 00:52:01.230 Lalit Gupta: Or we should never know not only 465 00:52:02.040 --> 00:52:09.990 William Cheng: By. I don't think there's any code to test this condition we run out of actually I think in in the in the textbook and map. 466 00:52:11.250 --> 00:52:15.210 William Cheng: Men cares. There's a user function called men. Men test. 467 00:52:16.230 --> 00:52:20.670 William Cheng: That I think he mentors. One of them has actually used up the entire address space. 468 00:52:22.200 --> 00:52:22.620 William Cheng: I think 469 00:52:24.900 --> 00:52:31.350 William Cheng: So in that case, even if you try to, you know, allocate one more page or try to do, you know, I tried to 470 00:52:32.160 --> 00:52:40.860 William Cheng: Call the function to say fine range and you just want to find one page and he will return failure because there's nothing available in the address space with the entire address basis map. 471 00:52:44.790 --> 00:52:46.140 William Cheng: Yeah, so I think there's a test for that. 472 00:52:47.400 --> 00:52:56.130 Lalit Gupta: Okay, so. Okay, so, so, so are you saying that this time. This test will should be able to tell us whether we should just say no memory, or rather, should we die. 473 00:52:56.850 --> 00:53:03.480 William Cheng: Well, the this test, test that condition. Right. So in that case, they will make sure that when you try to find, you know, when we try to create another page. 474 00:53:03.690 --> 00:53:08.940 William Cheng: I will we try to create another memories that man is that why there's no way to create this memory segment, because the entire address basis us 475 00:53:11.700 --> 00:53:15.660 Lalit Gupta: Yes, we can tell that. But should we like kill, kill the program. 476 00:53:16.440 --> 00:53:18.930 William Cheng: No, no, no. You're supposed to, you know, pass the test. 477 00:53:20.040 --> 00:53:27.810 William Cheng: Okay, so in that case you return now and then. It's a great huge return because that's what's expected because you supposed to run out of memory, right. And then, then in that case you pass the test. 478 00:53:29.670 --> 00:53:33.150 Lalit Gupta: Okay, so in this in this this dynamic region there. 479 00:53:34.530 --> 00:53:40.290 Lalit Gupta: Are two kind of elevator. One is the elevator and the other one is the body applicator. 480 00:53:41.040 --> 00:53:46.920 William Cheng: No no no no no no user space. They always use first fed the buddy system is using the Colonel. 481 00:53:48.690 --> 00:53:52.200 Lalit Gupta: Okay, so okay so this dynamic region is actually first one 482 00:53:52.500 --> 00:53:53.010 Yes. 483 00:53:58.350 --> 00:54:08.940 William Cheng: So it is possible that you're here is because of, you know, external fragmentation that in the end he will return. No, not because you run out of memory, but because you know the fragments are too small to be useful. 484 00:54:10.440 --> 00:54:19.800 William Cheng: Right. Or maybe the you know the the the the the the we can call Malik, you try to call them out on 2 billion or something like that. Well, then in that case. Yeah. If you fail. 485 00:54:21.090 --> 00:54:24.450 Lalit Gupta: Okay, so this dynamic region is is this dynamic region. 486 00:54:25.500 --> 00:54:26.730 Lalit Gupta: Managed by Kamala 487 00:54:27.390 --> 00:54:30.900 William Cheng: Know this, this is managed by the memory alligator, which is Malaga free 488 00:54:34.860 --> 00:54:35.820 William Cheng: This is user space. 489 00:54:36.960 --> 00:54:41.520 Lalit Gupta: Oh, yes. Oh, yes, it's Malik, but in the US, the users. 490 00:54:42.570 --> 00:54:45.300 William Cheng: Right now, like is done by the first memory allocated. 491 00:54:47.340 --> 00:54:50.580 Lalit Gupta: And what about the Kamala in the corner space. 492 00:54:51.750 --> 00:54:53.580 Lalit Gupta: Because they don't see Malik in the corner space. 493 00:54:53.640 --> 00:55:07.050 William Cheng: I don't know exactly what came out does because, you know, usually in the kernel, you use the slab alligator, will you use the the the page frame alligator alligator one page at a time. 494 00:55:08.730 --> 00:55:11.700 William Cheng: Yeah, I think, hey Malik is being used somewhere. I don't. Yes. 495 00:55:11.730 --> 00:55:13.980 Lalit Gupta: It does. I pretty, pretty sure 496 00:55:15.870 --> 00:55:21.480 William Cheng: Yeah, so I think came out like just call you know the the buddy system to allocate, you know, multiple pages. 497 00:55:22.440 --> 00:55:23.490 William Cheng: Oh so came out again. 498 00:55:23.850 --> 00:55:26.790 William Cheng: So you're gonna end up with the with the internal fragmentation. 499 00:55:28.380 --> 00:55:32.220 Lalit Gupta: Okay, so okay so okay Malik behind the scene is actually body electrician only 500 00:55:32.370 --> 00:55:39.660 William Cheng: Yeah, so I think if you say came out five kilobytes, it will return to you, you know, two pages that are contiguous or you end up with eight kilobytes or 501 00:55:42.300 --> 00:55:47.850 William Cheng: Maybe in the device driver, they call came out when they need to allocate a buffer I because there's no snap, snap alligator for them. 502 00:55:56.460 --> 00:56:00.360 William Cheng: And also just call came Allah. You want a four kilobytes. Right, so you can also do that. 503 00:56:02.940 --> 00:56:10.230 Lalit Gupta: Yeah, but then it's probably due to initialize us. It's better to initialize a slab alligator. If we know already that we 504 00:56:11.250 --> 00:56:15.030 William Cheng: Will use the slab alligator only if it's a commonly used Colonel data structure. 505 00:56:15.480 --> 00:56:16.290 Oh, 506 00:56:19.170 --> 00:56:30.360 Lalit Gupta: Actually, I was thinking I was thinking why in this idea because now you know you told me that came out like his body alligator. But I had previously thought that came alligator alligator. 507 00:56:30.990 --> 00:56:34.350 William Cheng: So you said the Colonel, you can, you know, you 508 00:56:35.430 --> 00:56:42.120 William Cheng: Have to use a memory allocated as good performance for us to a memory allocated order n. That's not acceptable inside a carnal. 509 00:56:48.750 --> 00:56:55.320 Lalit Gupta: I have, can you go to this have a similar similar question on on this thing a vertex in 510 00:56:56.640 --> 00:57:00.000 Lalit Gupta: The function elf category 32 dot see 511 00:57:00.810 --> 00:57:02.520 William Cheng: Okay, let me switch back 512 00:57:12.480 --> 00:57:15.090 Lalit Gupta: Yes, so I think 513 00:57:20.190 --> 00:57:22.110 William Cheng: We have a line number you can give me a line number 514 00:57:23.070 --> 00:57:24.090 Lalit Gupta: Yeah, I should have written there. 515 00:57:30.330 --> 00:57:31.200 Lalit Gupta: Okay, thank you. 516 00:58:03.300 --> 00:58:04.560 William Cheng: So what does that line look like 517 00:58:06.480 --> 00:58:12.330 Lalit Gupta: It's like a car Brock arrow be underscore be RK s i think 518 00:58:13.110 --> 00:58:15.090 Lalit Gupta: The arcade. Yeah. 519 00:58:16.170 --> 00:58:18.600 William Cheng: Okay, are we here. Yeah. So this right here. 520 00:58:19.050 --> 00:58:20.100 Lalit Gupta: You're here it is. 521 00:58:21.810 --> 00:58:22.200 Lalit Gupta: So, 522 00:58:24.240 --> 00:58:30.750 Lalit Gupta: So x via I was basically wondering why it seems like we have no keep 523 00:58:33.630 --> 00:58:38.010 William Cheng: Looking at this, yeah. So star break over here is the, you know, it's the end of the 524 00:58:38.040 --> 00:58:39.150 BSS right 525 00:58:40.170 --> 00:58:42.330 Lalit Gupta: Yes, and the br K is also the same thing. 526 00:58:43.380 --> 00:58:43.800 William Cheng: Right. 527 00:58:45.270 --> 00:58:47.580 William Cheng: Was at the beginning. The, the, he was empty. 528 00:58:56.640 --> 00:59:10.380 Lalit Gupta: Okay, so I what is if you can. Do you know what is this data. Data variable Prague, an alert digital. Hi. There's also probably know this is probably pirate, there is a problem variable. So, in this same function. 529 00:59:11.010 --> 00:59:11.400 Okay. 530 00:59:12.450 --> 00:59:13.080 William Cheng: Hi. 531 00:59:13.890 --> 00:59:15.990 Lalit Gupta: Tom. Hi, is their problem. The problem also 532 00:59:17.070 --> 00:59:25.590 William Cheng: Right, so it says elf 32 characters. I mean, you know, we just have to trust that this code works. You know, we can't really figure out how everything works. So be they'll take too long. 533 00:59:26.460 --> 00:59:30.960 Lalit Gupta: Okay. All right, can, can you go to this function. This calc prog bands. 534 00:59:32.580 --> 00:59:33.480 William Cheng: Well, I mean, 535 00:59:34.230 --> 00:59:36.690 Lalit Gupta: There's a comment that I want to make sure 536 00:59:39.420 --> 00:59:41.070 William Cheng: I mean this is readable code. 537 00:59:41.310 --> 00:59:41.970 Yeah. 538 00:59:43.140 --> 00:59:46.020 William Cheng: So why try to figure this out, you know, 539 00:59:47.790 --> 00:59:53.070 Lalit Gupta: I'm just trying to a non content and not trying to understand this code. I'm trying to understand the comment. 540 00:59:54.300 --> 01:00:00.210 William Cheng: Yeah, I mean, I, I've never read this. I don't think we should care which you just trust that it works. And that's that. 541 01:00:03.360 --> 01:00:07.620 Lalit Gupta: Okay, what okay so even then, what is this program header table. 542 01:00:10.230 --> 01:00:13.800 William Cheng: You all have 32 right the executable files in the elf 32 format. 543 01:00:14.130 --> 01:00:27.810 William Cheng: So, you know, again, the binary file is represented some kind of a data structure that describes the address space, right. So, this we also know that this code is for parsing the the elf 32 file format. 544 01:00:29.130 --> 01:00:36.150 William Cheng: If it's a different file format, there's a different way to calculate all these kinds of stuff. Right. So again, this is, you know, specific to the elf 32 file format. 545 01:00:37.500 --> 01:00:37.830 Lalit Gupta: Okay. 546 01:00:38.010 --> 01:00:40.530 William Cheng: And again, anybody should care what the elf 32 pounds. 547 01:00:40.530 --> 01:00:44.400 William Cheng: Format is unless somebody really wants to learn and deployment. 548 01:00:45.990 --> 01:00:47.910 Lalit Gupta: In general, what is heritable means 549 01:00:49.350 --> 01:00:57.900 William Cheng: What it's a, you know, the fall is a data structure. I mean, whatever they want to call it, you know, they all have 32 they call it header for, I don't know. I mean, doesn't really matter. 550 01:00:58.590 --> 01:00:58.980 Okay. 551 01:01:00.060 --> 01:01:03.780 William Cheng: I mean, it's the terminology specific to the elf 32 format. 552 01:01:05.070 --> 01:01:11.520 William Cheng: Okay, so if you really want to become an expert in yellow 32 format. Well then you try to understand this. But, but, you know, 553 01:01:12.540 --> 01:01:15.330 William Cheng: Some clouds were not interested in you know binary format. 554 01:01:17.220 --> 01:01:23.130 William Cheng: Almost like you know you want to go to a JPEG file right JPG file, what impact. What is the header look like, Well, I don't know. 555 01:01:24.240 --> 01:01:28.380 William Cheng: We didn't we are if you use the JPEG harsher you trust that it will do the right thing, right. 556 01:01:41.760 --> 01:01:48.990 Lalit Gupta: I'm basically trying to like in from from this. Actually, I was trying to basically understand like, who is actually changing this br 557 01:01:50.850 --> 01:02:05.160 William Cheng: Yeah, it's the user space program. Right, so, so, so if you look for be okay right so grab the RK user user been start RC. Okay. Nothing there is doing that. So how about user live 558 01:02:06.210 --> 01:02:07.080 William Cheng: User 559 01:02:08.220 --> 01:02:17.190 William Cheng: Lip. Lip see Star Darcy. Oh, okay. So inside Malik. So when you call Malik. That's when it called break 560 01:02:19.200 --> 01:02:19.710 Lalit Gupta: Okay. 561 01:02:19.770 --> 01:02:25.080 William Cheng: Well, it kind of makes sense, right, because you never call mallard. That means that you don't need a heat, but the first time you call Malik. 562 01:02:25.980 --> 01:02:34.380 William Cheng: That's when the heat is get created. Yes. So in that case, you will make the br cases some calls right at the beginning, you know, the heap size is equal to zero. 563 01:02:34.920 --> 01:02:42.180 William Cheng: So now, you would just, you know, make it bigger. Okay, so, so, so, again, the first time you're gonna you're gonna call Malik is in s been in it. 564 01:02:43.110 --> 01:02:54.000 William Cheng: Okay, so if you follow the grading guideline right you pass on that program where you get to spin in it as been in is the one that will call Malik. OK. OK. So, at that time, you need to get the process break to work. 565 01:02:55.500 --> 01:02:55.890 Lalit Gupta: Oh, 566 01:02:58.770 --> 01:03:09.900 William Cheng: Yeah. So I guess the breakdown to work and also the do em map function has to work so you so you need to handle the brake system call need to handle the end map system call you know when you try to get the s been in it to work. 567 01:03:14.250 --> 01:03:14.670 Okay. 568 01:03:18.000 --> 01:03:21.030 Lalit Gupta: And can you also go to this a peek m dot V 569 01:03:24.390 --> 01:03:24.690 William Cheng: Okay. 570 01:03:25.710 --> 01:03:29.190 Lalit Gupta: Yeah and there's a functioning PC get resident 571 01:03:32.490 --> 01:03:35.730 Lalit Gupta: Underscore, underscore, underscore, 572 01:03:37.410 --> 01:03:38.130 William Cheng: Okay, right. 573 01:03:39.300 --> 01:03:55.950 Lalit Gupta: Yeah, so I'm not able to understand this. So if condition. So the same if not been then send it to look at. But I thought if it should. I thought this is like a redundant, I, I'm not able to invite why we ever need this. 574 01:03:59.850 --> 01:04:02.700 William Cheng: Why, why do the pin business. 575 01:04:03.180 --> 01:04:04.380 Lalit Gupta: Yes, the spin business. 576 01:04:04.590 --> 01:04:05.640 William Cheng: Yeah, I don't know. 577 01:04:07.830 --> 01:04:08.820 Okay, so 578 01:04:09.960 --> 01:04:14.880 William Cheng: So it removed from the list and then it so it's like the most recently used thing. 579 01:04:17.700 --> 01:04:31.170 William Cheng: If it's not pin that means that it's in the list that's that that's that's used by the page on demand. So, therefore, this page frame is most recently used so therefore they removed it from wherever it is, and then added to the end. So, so it says are you 580 01:04:37.140 --> 01:04:37.380 Lalit Gupta: Well, 581 01:04:39.570 --> 01:04:53.340 Lalit Gupta: Well, I thought I think you said something, I think, which makes sense, but I'm not able to understand right now i right now. What I my previous thought was that if the page has not been then it has to be allocated bucket list. 582 01:04:53.460 --> 01:04:58.680 Lalit Gupta: Yes. And then it makes no sense to actually remove from the liquid list and insert to the request list. 583 01:04:59.400 --> 01:05:09.600 William Cheng: Well, so remember my lecture that I talked about the LR you a replacement policy where I have a, you know, I, the example that I use it, you have a rack of DVDs. 584 01:05:09.960 --> 01:05:17.190 William Cheng: And you want to sort of implement the value algorithm. So what whichever DVD that you watch you took it out and you put it at the end of the list. 585 01:05:18.570 --> 01:05:24.630 William Cheng: That's exactly what this code is doing right they remove from, you know, from from the link list and then put it at the end. 586 01:05:26.040 --> 01:05:27.900 Lalit Gupta: Which link list. Is it coming from 587 01:05:29.160 --> 01:05:32.370 William Cheng: You know, you made this. As you know, in the allocated list over here. I 588 01:05:33.690 --> 01:05:37.290 Lalit Gupta: Know, yeah, that's, I know that it is putting into the 589 01:05:38.640 --> 01:05:39.420 Lalit Gupta: Ah, 590 01:05:39.510 --> 01:05:40.110 William Cheng: Pick up on the 591 01:05:40.860 --> 01:05:41.640 William Cheng: Move it to the end. 592 01:05:44.100 --> 01:05:47.670 William Cheng: Business will be sorted according to the according to the last time they were accessed. 593 01:05:48.630 --> 01:05:51.450 Lalit Gupta: Oh, OK. OK. I know exactly what it does. No. 594 01:05:51.540 --> 01:05:51.870 Thank you. 595 01:06:05.430 --> 01:06:15.060 Lalit Gupta: Yeah, there is a in in shadow dot c day I'm not able to like understand the difference between this look up and fill page. 596 01:06:18.840 --> 01:06:21.180 Lalit Gupta: There is a fun to function. This look up and fill page. 597 01:06:21.720 --> 01:06:27.090 Lalit Gupta: Yeah. Seems. What's the difference 598 01:06:28.980 --> 01:06:31.680 William Cheng: Yeah, so the Phil page is the one that does copy on. Right, right. 599 01:06:34.290 --> 01:06:36.060 William Cheng: Right over here. It says, you know, 600 01:06:41.550 --> 01:06:47.310 William Cheng: Write the copy on write magic is not here right so be here. You don't do copyright. There's just wanted to just try to find a page. 601 01:06:48.210 --> 01:06:57.840 William Cheng: So will you tried to look up a page for writing. It's always the first shadow object, right, we need to look up the page for reading you need to go down the link lives over there and find, you know, find the object. 602 01:07:00.660 --> 01:07:06.240 William Cheng: Right. Remember the algorithm. I will you try to look up a you know a shadow object. If it's well for writing it has to be the first one in the link address 603 01:07:06.690 --> 01:07:16.980 William Cheng: And if it's a if you're trying to, you know, look for a shadow patient needs I shot object for for reading you need to iterate through the list of Java object until you find it. 604 01:07:17.850 --> 01:07:33.660 Lalit Gupta: But if it is a writing and if, how about let's say if it is for a field in the local page for writing, then if it is not in the past shadow object, then it shouldn't be. Go to the next next punter 605 01:07:33.810 --> 01:07:37.080 William Cheng: Down the to know for for writing it has to be in the first one right 606 01:07:39.390 --> 01:07:44.520 William Cheng: So with that in the first one that you have to create it. Right. I mean, you need to get ready for copying. Right, right. 607 01:07:46.290 --> 01:07:51.630 Lalit Gupta: Yes, then we have to get it get it for, copy, copy on write and then Dan. We have to call this still page function. 608 01:07:52.650 --> 01:07:53.340 William Cheng: Right, yeah. 609 01:07:55.620 --> 01:07:57.300 Lalit Gupta: Then it basically we are 610 01:07:57.930 --> 01:07:59.130 William Cheng: Whereas over here. 611 01:08:04.890 --> 01:08:05.940 William Cheng: It's important. 612 01:08:07.050 --> 01:08:08.340 William Cheng: Okay. Yeah, over here, right. 613 01:08:13.680 --> 01:08:17.670 William Cheng: So they feel page is the function below it. Right. So this is where where it gets 614 01:08:18.840 --> 01:08:19.680 William Cheng: You know, copy. All right. 615 01:08:22.890 --> 01:08:23.820 Lalit Gupta: Yes, so if 616 01:08:28.890 --> 01:08:39.570 Lalit Gupta: Yes, I suppose we want to do do a copy and right and we started from the first shadow object and, three and, and, and the page, we want to see is not there. 617 01:08:39.930 --> 01:08:41.040 William Cheng: Right. So what you would do is 618 01:08:41.700 --> 01:08:52.410 William Cheng: When you say you tried to do a lookup right you try to look it up for reading or writing right if you want to look up for writing, then you will end up with the pace rain. That's it. That's the first object. Right. The first object. 619 01:08:53.340 --> 01:08:59.340 William Cheng: Yes. Okay. And this one, you know, maybe it's empty, because at the beginning you create an empty one 620 01:09:00.960 --> 01:09:14.580 William Cheng: Okay. And then when you get to shadow Phil page, you know, later on. That's why you will. What will you do the copy on. Right, right. You get you need to find the one that's that's to reframe, and then you write it into the copy right 621 01:09:29.790 --> 01:09:34.080 Lalit Gupta: Why, why, why does it even creative me. Why does this 622 01:09:35.250 --> 01:09:49.560 Lalit Gupta: Okay. So you are saying when we are doing for writing, then when the shadow page can look of page can create an empty page, but the job of job to actually fill that page to the data is the job of the film page. 623 01:09:51.030 --> 01:09:55.920 William Cheng: Okay. Over here says, write the foreword arguments to the page look for writing for this. 624 01:09:59.460 --> 01:10:06.270 William Cheng: One for right is false, find the first other object in the chain, which has given who has given page resident 625 01:10:07.620 --> 01:10:09.270 William Cheng: World for right is true. 626 01:10:11.460 --> 01:10:15.210 William Cheng: Is handle in the Phil page right not here. 627 01:10:20.070 --> 01:10:23.130 William Cheng: Yeah, so, so this function supposed to return a page frame right 628 01:10:24.210 --> 01:10:26.940 William Cheng: Okay, Jeff, what if you try to look up a page to him for right 629 01:10:27.000 --> 01:10:34.800 William Cheng: It has to be, it has to be belong to the first shadow object. Right. Yes. So you do whatever it takes to make sure that that's true. 630 01:10:39.750 --> 01:10:40.380 William Cheng: So, so you 631 01:10:40.620 --> 01:10:43.950 William Cheng: Shot object is empty, you need to create a, you know, an empty object. 632 01:10:44.160 --> 01:10:57.330 William Cheng: And then you need to trust that later on. Phil page will get called and then you will copy the data from, you know, from the right place to the, you know, to, to, to, to this particular page for him that's returned by by look up page. Oh. 633 01:10:59.070 --> 01:11:03.300 William Cheng: Right. So yeah, maybe because of polymorphous them. This is kind of, you know, we're way of writing code. 634 01:11:06.810 --> 01:11:13.560 Lalit Gupta: Yes, yes. You like that, eventually, it seems like that sort of pages calling this film page on 635 01:11:13.650 --> 01:11:23.730 William Cheng: Right. So again, this is the Brown University design you know that that's all we have to deal with they they they divide this into two steps. One is look at page. The otherwise about the you know the full page. 636 01:11:26.670 --> 01:11:31.440 William Cheng: So you can look up page, you'll find a page frame and then, you know, fill page you fill the page with data. 637 01:11:34.800 --> 01:11:35.610 Lalit Gupta: And 638 01:11:37.950 --> 01:11:39.120 Lalit Gupta: The pages for 639 01:11:40.230 --> 01:11:48.240 Lalit Gupta: Reading and then we what we have to do is we have to find the data we have to go down the chain and find where the data, is data first. 640 01:11:49.500 --> 01:11:52.380 Lalit Gupta: You have to find the first memory object where the data is 641 01:11:52.560 --> 01:11:52.920 Yep. 642 01:11:54.090 --> 01:11:55.140 Lalit Gupta: What if we 643 01:11:56.370 --> 01:12:01.320 Lalit Gupta: What if we go down to the bottom and the bottom does not even have it because it is not as urgent. 644 01:12:01.770 --> 01:12:04.020 William Cheng: And then, then the bottom better created that 645 01:12:06.540 --> 01:12:13.470 Lalit Gupta: Okay, so yes. Yes. What you're saying is making sense to me. But damn the comment is ok is saying that 646 01:12:14.310 --> 01:12:29.880 Lalit Gupta: Find a fresh out of debt in the chain, which has the given page resident. So, it should. It seems like it's interesting, interesting to me that it has to be resident, but it's from your command. It seems like in the bottom. It may not be resident and we have to create them. 647 01:12:30.570 --> 01:12:38.820 William Cheng: Right, and also in the first one, right, like in the, in the beginning, you know, when we, you know, first are running the shadow of the shot. Rochelle for celebrities always empty right 648 01:12:39.990 --> 01:12:44.820 William Cheng: So therefore, the first thing that you need to do is to write to a shadow object. Well, in that case, you have to create a page rank right 649 01:12:47.490 --> 01:12:53.940 William Cheng: I mean this, the semantics of this look up, you know, page function is that if it's successful, it will always return a page rank. 650 01:12:55.680 --> 01:13:01.860 William Cheng: Right. So if you want to create a payment if you need a payment for writing and you're supposed to return a page, right, and then you have to create it. 651 01:13:15.060 --> 01:13:18.780 Lalit Gupta: Okay, so. Okay, so look up just fine. But how about the still page. 652 01:13:21.300 --> 01:13:27.870 William Cheng: Right, so, so once you call look at page over here, right, if it turns out it was a festival reading, then you will not call Phil page right 653 01:13:29.280 --> 01:13:36.150 William Cheng: Because it is for reading that and there is there already. But if it's for writing that in this case, the patient will point to an empty page full of zero. 654 01:13:36.360 --> 01:13:47.580 William Cheng: And then you will get to fill page right when you get the pillar page over here. This argument is going to be the one that's returned from the proper look up page and now you're going to fill this page with data by copying from where you're supposed to copy from 655 01:13:54.240 --> 01:13:59.010 William Cheng: Well, we can actually look for Bill page Colonel start. I see. 656 01:14:07.290 --> 01:14:13.470 William Cheng: Let's see, Colonel. So where should Where should we look, we noticed the 657 01:14:23.310 --> 01:14:27.960 William Cheng: Okay, so this one's not very useful colonel and frank, I see. 658 01:14:33.120 --> 01:14:37.740 William Cheng: Okay, so P frame, Phil. Maybe we should look for P friend, Phil. 659 01:14:47.700 --> 01:14:49.560 Lalit Gupta: Should we do up front. 660 01:14:50.190 --> 01:14:57.450 William Cheng: It's right there. But nobody's calling it right so maybe one of your one of the the code that that you need to write will have to call it. 661 01:15:01.320 --> 01:15:11.310 Lalit Gupta: Yeah. But the thing is, be faithful is like is just a pointer, it just eventually, it has to reach our function or the function that is already given to us. 662 01:15:12.300 --> 01:15:14.010 William Cheng: Right, I'm just trying to 663 01:15:45.510 --> 01:15:49.080 William Cheng: So there's the lookup function. And then there's the fill function. 664 01:15:54.780 --> 01:16:03.300 William Cheng: This function P for until it's a static function. Right. Okay. It's not being used anywhere. So, so, so I think one of the function that you have that 665 01:16:03.390 --> 01:16:04.260 Lalit Gupta: Yeah, I know. 666 01:16:05.370 --> 01:16:06.750 Lalit Gupta: I know I think 667 01:16:07.980 --> 01:16:09.030 Lalit Gupta: I can tell you if you want 668 01:16:09.900 --> 01:16:10.920 William Cheng: To get right 669 01:16:11.040 --> 01:16:12.060 Lalit Gupta: Yes, they're speaking. Good. 670 01:16:12.270 --> 01:16:17.190 William Cheng: Okay, so if you look at a comment of P frame get right. What does it say, Phil. 671 01:16:18.720 --> 01:16:20.490 William Cheng: Okay, it says 672 01:16:22.950 --> 01:16:23.370 William Cheng: You know if 673 01:16:24.000 --> 01:16:29.640 William Cheng: Not already resume memory, you know, otherwise we allocate a new page and fill it right 674 01:16:30.930 --> 01:16:37.830 William Cheng: Okay so allocate a new a new page that's done by the lookup function and then still page is done by the Philippines, the Philippines function right 675 01:16:39.240 --> 01:16:41.970 William Cheng: So it's actually give you a hand how they implement paper and get I 676 01:16:44.100 --> 01:16:48.270 William Cheng: You know, if it already exists, you should use it if it doesn't exist. You create a new page and then you fill it. 677 01:16:52.530 --> 01:16:53.460 Lalit Gupta: Okay. 678 01:16:55.320 --> 01:17:09.810 William Cheng: Yes, so, so, so, so if you are you know you've been doing copy on write. And then, you know, when you are calling the lookup for writing why nutcase. Yeah, that's where it is right allocate a new page in our function. 679 01:17:17.160 --> 01:17:26.010 William Cheng: I mean you know the code over here says otherwise we allocate a new page, it doesn't mean that you allocate in a new page inside this function is that you need to call another function that will allocate a new page. 680 01:17:29.160 --> 01:17:31.860 William Cheng: So I think that's the, you know, that's the look on page function. 681 01:17:34.650 --> 01:17:37.080 William Cheng: Okay, I think that's what it's referring to 682 01:17:38.910 --> 01:17:44.190 William Cheng: Right, because look up, look up a page function will create a page frame. It is not there. 683 01:17:45.990 --> 01:17:57.060 Lalit Gupta: Okay, okay. So, if it is there it will just look up it look it up and there and otherwise it will actually if it is not relevant at I will actually create a page and make it resident and fill it with 684 01:17:57.960 --> 01:18:08.040 William Cheng: For for. Yeah, the more than one reason that you know either. This page is not resident or you are doing copy on write for writing right so there are multiple reason why you need to allocate a new page. 685 01:18:13.140 --> 01:18:15.390 William Cheng: So it's all summarizing half a sentence right here. 686 01:18:17.130 --> 01:18:18.360 Lalit Gupta: Yeah, there's a 687 01:18:19.320 --> 01:18:19.920 William Cheng: Yeah, there we go. 688 01:18:23.040 --> 01:18:23.490 Okay. 689 01:18:27.600 --> 01:18:30.450 Lalit Gupta: So, okay, let's can, can you go to the slide. 690 01:18:31.560 --> 01:18:37.980 Lalit Gupta: Lecture 16th like 66 691 01:18:51.510 --> 01:18:52.140 William Cheng: This is the one. 692 01:18:52.680 --> 01:18:53.220 Yes. 693 01:18:56.190 --> 01:19:06.660 Lalit Gupta: So it thing Venus does this into step. It does not change the this pretty to our office. What is that the action it and map that you entire user space table. 694 01:19:07.140 --> 01:19:07.920 Lalit Gupta: And then it's 695 01:19:08.040 --> 01:19:09.390 Lalit Gupta: In the next page fault. 696 01:19:11.250 --> 01:19:12.180 Lalit Gupta: Yes, this is 697 01:19:12.300 --> 01:19:16.140 Lalit Gupta: Late what, how does this next fridge for like finally ordered 698 01:19:17.070 --> 01:19:22.110 William Cheng: Yeah, so, so for all these pages table entries over here, right, if you just said, Be equal to zero of all them right 699 01:19:22.800 --> 01:19:29.190 William Cheng: Okay, and then you can go into the user space right landing page right away when it will address translation because be equal to zero. 700 01:19:30.000 --> 01:19:37.680 William Cheng: Yes. Okay, so. So it's as if you're doing equal to zero. So, next time when you come into the kernel, you said all these entry back to read only. Right. 701 01:19:41.220 --> 01:19:51.330 William Cheng: I mean, as it turns out, if you're writing to one in this case you can set it to rewrite or again you're fixing a baseball bat. So using the in the data settings that external you can figure out what you know what you have to do. 702 01:19:53.130 --> 01:19:57.510 Lalit Gupta: Okay, okay. So depending on the conditions. 703 01:19:58.050 --> 01:19:59.490 William Cheng: Yeah, they just like the first time you 704 01:20:01.050 --> 01:20:10.110 William Cheng: Get over here when we fork it as if you're starting from scratch, right when you thought it sounded much glad you're doing on demand paging so therefore all the data stuck inside of kernel. 705 01:20:11.520 --> 01:20:14.100 William Cheng: memory map to tell you how to fix the page fall 706 01:20:15.630 --> 01:20:16.050 Okay. 707 01:20:21.300 --> 01:20:26.850 Lalit Gupta: Okay. So setting up this thing is is a job of this pitch for Tango. 708 01:20:27.540 --> 01:20:29.310 William Cheng: No, no, this is this is do fork. 709 01:20:31.890 --> 01:20:32.460 Lalit Gupta: Or this is 710 01:20:33.630 --> 01:20:34.020 William Cheng: Rather than 711 01:20:34.620 --> 01:20:37.920 William Cheng: I do for you need to reset for copyright for both the parent of the child. Right. 712 01:20:38.130 --> 01:20:44.700 William Cheng: So you do all this kind of stuff. And now both plan and a child, they will return to the users baseball bat and both of them will get paid fall and then you start fixing 713 01:20:45.960 --> 01:20:46.860 William Cheng: Fixing the page table. 714 01:20:48.900 --> 01:20:56.880 Lalit Gupta: Okay, so when when both of them go back to this after after from the page fall to the Colonel, then we have to set it to this. 715 01:20:58.080 --> 01:21:00.150 Lalit Gupta: This field to our right. 716 01:21:00.390 --> 01:21:05.970 William Cheng: Yeah, so, so as soon as so you know as soon as I say that the parent process called called do for a cold call forth, right. 717 01:21:06.180 --> 01:21:08.940 William Cheng: You're gonna come he's out a colonel in do for you do all these kind of stuff. 718 01:21:09.180 --> 01:21:13.950 William Cheng: And then when the parent process returned back into the user space. The first thing that will happen is is a paywall 719 01:21:16.860 --> 01:21:22.890 William Cheng: Okay, and then the patient is going to be at the at the parents is tech segment because you know the tech side when they try to execute code. 720 01:21:23.100 --> 01:21:30.960 William Cheng: And it turns out address translation fail because equal to zero, you're gonna come into the kernel, you're going to fix it and you go back again and now it's going to you know you gotta, you gotta get a few pages faults. 721 01:21:31.200 --> 01:21:38.040 William Cheng: Because, because you are you know you're doing all kinds of stuff in the parent process. And similarly, when the child processes, go back to the user space, the same things gonna happen. 722 01:21:39.060 --> 01:21:44.100 William Cheng: Okay, okay. So when you are debugging the code for for can wait a fork and wait 723 01:21:45.660 --> 01:21:48.150 William Cheng: So this is where you're going to notice that you're gonna get a lot of page faults. 724 01:21:49.950 --> 01:21:56.820 William Cheng: You know, after you make the fourth system called and the parents going to paste all the child's gonna paste fall so gotta, you gotta get all those code to work. 725 01:22:25.320 --> 01:22:30.150 William Cheng: So, Angela. Do you have any question that you would like to ask 726 01:22:32.880 --> 01:22:38.310 Andrew Strimaitis: Honestly, so many questions were asked in the last hour, hour and a half, that it kind of covered what I was going to ask. 727 01:22:38.490 --> 01:22:42.000 Andrew Strimaitis: Okay. Um, so I don't really need to chime in. 728 01:22:42.390 --> 01:22:42.780 Okay. 729 01:22:50.250 --> 01:22:53.490 Andrew Strimaitis: Thank you both. Okay, thanks. Yeah. 730 01:22:53.550 --> 01:22:57.180 Lalit Gupta: I think this yeah I think this course, like my notes. 731 01:22:57.900 --> 01:22:59.280 Okay, thank you. 732 01:23:03.750 --> 01:23:06.270 William Cheng: Alright, so nobody has any more questions that then 733 01:23:06.510 --> 01:23:09.360 William Cheng: I'm going to, I'm going to shut this down.