Hey, John, can you tell us a little bit about your background and what you did before coming to UBC? I come from, I grew up in Manchester, England, and went to university there, and then the graduate work in the United States, and then I was teaching in Scotland and in England before coming here to UBC. Great. And why did you choose your particular area of study, Latin American studies, and can you tell us a little bit about your particular specialization? Well, Latin American studies was an accident, and I don't have any degrees in Latin American studies, or Spanish, or anything like that. I have one qualification, which is I did a first-year Spanish course, and I got an A-plus, so I'm very proud of that, but that's the only qualification I have to teach what I'm teaching. No, I studied English at undergraduate and masters, and I sort of was interested in theory and literary theory, mainly, cultural theory, and then I did, my PhD was in a program called a literature program, and early on the director of graduate studies sat me down and he says, this won't do, you will never get a job if all you do is theory. You need to pick a national literature. And I was very upset about this, but I said, okay, I'll do Latin American studies then. And he said, okay, now you have to go take some courses and learn something about Latin America. And I guess I chose in Latin America though, because I had been to Latin America.  And so I went to Nicaragua and El Salvador and Guatemala, I wandered around Central America for about nine months while the Central American Civil War was going on. So much later that sort of, I turned that, I suppose, into an academic interest. That's great. Can you tell us a little bit about your current research? At the moment, I'm doing a bunch of different things, but one of the things that I'm doing, and it relates to a couple of the texts that I'm going to be teaching, and that's one, is on ruins. This is a project I call American Ruins, which means Latin America and the United States and Canada. And so I've picked six ruins that seem interesting to me that range from an Inca ruin in the Andes to a theater in Detroit, to a head smashed in buffalo jump in southern Alberta, to a hospital in Chile, in Santiago de Chile, and a castle in Haiti, and a castle in Haiti as well. So they're interesting ruins because they're sort of the sites where you see the scars of history, I suppose. I'm interested in ruins because people always make telling stories about ruins, because they don't fully tell their own stories. Also, I'm kind of interested in philosophical, theoretical aspects of ruins. Should we view a ruin as a sort of absence, an indication of something that's gone, or should we see it as something that stubbornly persists and is kind of a positive presence where you didn't expect it to be here. So I guess most people talk about ruins, have thought about in terms of loss and absence, and I want to think about ruins in terms of stubborn survival, where you expect history to survive least. And can you tell us a little bit about your approach to teaching? I guess one of my general rules is that teaching is not about the teacher, and that it is not somebody supposed to know standing up and spouting from a position of some kind of authority. So I'm always kind of interested in destabilizing the kind of teacher-student relationship in different ways. I guess I've been interested over the last few years in the kind of technological ways of doing that, so that's why I sort of use blogs, and I've done an assignment on Wikipedia a few times and other things. These are all ways that, on the one hand, do just that sort of destabilize who's teaching whom, it's not always clear. And on the other hand, I like the notion that students are producing something that is worth producing. But the product is not the student themselves, the students are producers, I suppose. So for instance, in writing a blog, they're writing something that could be of interest, potentially at least to anyone who's interested in the topic that the student is writing on, or perhaps more obviously to an Wikipedia page, they're writing something for this vast public, this vast audience. And I want students to think at every different level, whether they're writing an essay, whether they're talking in a class, whether they're writing a blog, to realize that they have something to say. And then our job as teachers and instructors is to help them say it in an articulate manner as possible, and give them the sort of rhetorical and intellectual and other kind of weapons, I suppose, of tools, this is a less militaristic metaphor, to be able to express something that is theirs. Okay, how about what attracted you, Tarts One, to begin with, and what continues to attract you, Tarts One, keeps you here. I think the last one is fantastic. It is unique at this university at UBC, but it's also pretty special even on a wider sort of range of what gets done elsewhere. Partly because it is a place where disciplines don't matter. I suppose this relates to the fact that I don't fully fit within Spanish or American studies. I come from somewhere else, English, for instance, so I was unable to return to those kind of things. And to not think about how this fits within the department that I am or the discipline that I am, the disciplines are not majoring in anything yet right there. Interdisciplinary or pre-disciplinary, I suppose. I like the fact that we're co-teaching. I really like the co-teaching. And again, you're working with people who come from all these different backgrounds, philosophy, political science, music, classics, whatever. And I like that it's a chance to sort of think about some pretty fundamental issues. And you're given a lot of space and a lot of time. You really get to know the students because essentially I've seen students ten hours a week with the lectures, with the tutorials, with the seminars, with the officers and so on. And you're really working closely with the students on their essays and there's a lot of time for discussion and so on. So, yeah, it's great. I agree. Okay, can you tell us something about the books you're teaching this year so I can list them if you wish? I'm teaching some things that come out of the research that I'm doing. As I said before on ruins, I've got this little cluster on Haiti and I suppose that it's about... So, I've been working on these texts in terms of the way in which they deal with it, the optical ruin, this amazing thing. It's the biggest fortification or castle in the western hemisphere perched on this mountain, high above the plains of northern Haiti. In the context of the theme, which I'm very excited by by the way, the remake remodel, it's more thinking about the ways in which different authors, different writers have tried to think about or have been inspired by. This ruin and what it represents the Haitian Revolution. I've got this argument which I'll be trying in the lectures as well, I suppose. This ruin is at the origin on the foundation of 20th century Latin American literature, 20th century Francophone Caribbean literature and 20th century Anglophone literature. It is vital for all three of those. I'm going to try out those kind of things in the lectures and then the second semester I'll do a couple of texts that are much more new to me, shall we say. Things fall apart. You know Achebe and Apocalypse Now. They're not so much connected with my research but just... That's another thing I like about that one, I suppose. Endless challenge, right? We've been confronted with texts we don't know so well and we've got to think about for the first time not just even in new ways, right? How do I deal with this text? So that would be the challenge for the text that I'm teaching in the second semester. What are you looking forward to in the current year? I'm thrilled by this new theme. I think it's interesting that the remake remodel theme because we're kind of working with the kind of arts one model which has traditionally been sort of great books, western civilization but we're giving it a twist. So we're looking both at the kind of canonical, great books and then the ways in which they've been remade, remixed, redone and so on. We're also I guess we're giving a twist to what's usually a sort of kind of linear chronological account. You know, sort of Plato to whatever it's to, watchman in the case of the theme that I co-tort on last year. Here we're going to be consistently cycling back, which I think is interesting. I'm looking forward to working with a new team of instructors. I'm looking forward to a new bunch of students though I don't really get to see them till January for one reason or another, but that's okay. And I'm looking forward to the kind of experiments we might come up with the whole arts one digital thing. Last question, any advice for an incoming student of arts one or someone using the arts one digital website? Well, first of all, take it. If you're a prospective student, I think this is an unrivaled opportunity of spending a year thinking about some of these important questions and dealing with these great texts in a really kind of integrated, coherent manner. I think it really sets you up for the rest of your time at university, whatever subject you go on to do. I think for an incoming student, one of the things is don't be afraid. Again, this goes back to what I was saying, you have something to say. It is our job, the instructor's job, to help you say it. You'll find a really supportive atmosphere. Another thing that happens in arts one is you get to know your fellow students really well. You can kind of click as a team and I think that's something that people might, it might seem at the beginning that these are all your competitors and they know so much more than you, but I think you soon find that no, they're your allies and you can work together. I think that's something to think about. I mean, I think also the website, we're just putting all this material up there and there's so many different ways to use it and to sort of be imaginative and creative. That's something we try to do both here on campus and suggest we do it on campus. Think of connections between these texts, between these ideas, which is, I think that's what academic work is about a lot. EM Foster has this phrase at the beginning of Howard's End, only connect and I think that's, I've always liked that. Alright, well thank you very much, John. Thank you.


All righty, welcome back to operating systems. So today review time. So this is what? This is midterm Eve. So on midterm Eve, what do we want to go over today? I am here for your benefit. Any other words I use sound weird so I won't continue with that thought. So what we want to do? Oh, this slowly leave. All right, any special requests? UCLA midterm page table question. Is it the fall one? Is it the fall one? Yeah, it should be the fall one. Midterm, no. Is it this one? So where the offset came from? Yeah. Yeah, so the wording on this was kind of bad. By two megabyte pages, it probably should have been rewritten to instead of saying pages to say page size. Yeah, no, it should have been page size. I should have written it better. But you know, yeah. Yeah, so it's where you are within a page as long as the page size is in bytes. I mean, I could be really weird to you guys and say the page size is in bits. I don't know why I would do that just to make you divide by eight. But if it's in byte, it has to be byte addressable. So just however many bits. Yeah. Yeah, so you always want to multiply by the number of page levels of page tables you have, because it's a separate memory access for each one. And then the original one. So this exam was a closed book exam. So I gave them the equation, but they also said that recall for a single page table, this is the equation. So that's where the two came from. And then I was like, oh, calculate it for your multi-level page table. So you had two levels. So one for each level plus the original one, which is why this was three here. Yeah, yeah. Yeah, the actual memory you were accessing, like that physical memory. So yeah, no, they wouldn't be at the same time. So like, yeah, because they'd all be physical accesses, right? So they'd all take the same amount of time, but you can only access physical memory anyway. So all right. So wait, let me switch so I don't show you anything I shouldn't. So if everyone does not have any preferences, let's see if we can find a good one here. Nope, that was too far. All right, people seem to like doing virtual memory in like a certain sense. What about this? So have we seen this question yet? So you can go and look at the final for 353 as well, and the final for 111 if you want. And some of the questions are going to be valid for you. So this is from 353. So their final exam and there's a virtual memory question which you should be able to do so you might not have seen this yet. So we can do this. So we created a very silly machine. This silly machine has 12-bit virtual addresses, eight-bit physical addresses, page size of 16 bytes. So whenever I see a page size in bytes, I should probably just write it in powers of two because I'll probably need it. What's 16 in powers of two? Four, two of the power four. So without even reading the question, I'll just put two the power four here because I will probably need it later. And then the page table entry size is one byte, which I mean you can just do two the power of zero if you really want, but we're going to be multiplying and dividing by one, which I mean you don't have to do anything, but hey if you want to get in the habit of writing it, go ahead. So it says our page table entry has the following layout. So remember what is in a page table entry. The important things is that it has the physical page number and then it has some permission bits which it would at least need to have a valid bit. Likely it probably also has a read and a write bit and then an execute bit or something. At the very minimum though it would need a valid bit. Here I just created four bits for the permissions. So you might notice here that this system is overly nice to you because you don't actually have to write anything out in binary because it kind of nicely matches with hex numbers. So this is our eight bit physical page table entry. So eight bits because it is one byte. So the last four bits are the permissions here and they are four bits which would be exactly one hex character. So you can actually read it. And then the upper hex character is the ppn which is also four bits here again to make your life easier. So given that information I also give you a giant dump of physical memory. So this is like the base address here and then the columns are like the offset. So if you want to know what the value it the byte is at address something like I don't know zero three. Well you would go in this column and zero plus three is zero three. So the byte there would be AF. If you want to look at what the byte is at address two four well you go here. So it starts off at two and then plus four you would get this byte. So at address two four in hex you would have the byte three F. So any questions about reading just the dump of virtual memory or no sorry this is physical memory physical memory. Yeah yeah yeah so in this like every column is eight eight bytes here because I can only fit eight on a page or on a row. So the ppn is four bits which means it would start like if you have a ppn of zero it means that well all address zero zero in this case so offset zero all the way to the max all of those addresses would be on the same physical page right which would be 16. So if I want to another easier thing to do might be just to take this memory and everything will be page aligned so I'll just divide it into pages. So essentially since my page size is 16 bytes I can just divide it into groups of 16 bytes. So something like this. So everything here would be on physical page zero all these 16 bytes would be ppn one this would be ppn oh two this would be ppn oh three something like that. So if you look at memory like that well there's four physical pages zero one two and three. So any questions about that? All right so first question is how many bytes do we need to store a single page table if we used it? So here we have 12 bit virtual addresses eight bit physical and page size of 16 bytes. So if I have a single large page table I need an entry for every single virtual page number right? How many virtual page numbers do I have in this silly system? So how many virtual page numbers do I have in this silly system? 4,096 how'd you get that? So to the 12 that would be my entire virtual address space so then I have to pick that and then divide by the page size right? No so this is just a single large page table. So if I have a single large page table I need an entry for every single virtual page number yeah so not related to the physical address at all. So in this case yeah so to the power of 12 is like how many bytes I can use for all my virtual addresses then to figure out how many virtual page numbers I actually need to support well I just divide that total by the number or by the page size which is two the four so that means I need two of the eight virtual page numbers in my giant page table if I just use a single page table. So that's how many page table entries I need and then if I need the total size of that well I take this number and then multiply it by the pte size what's the pte size and this in bytes one so I can just leave it alone. So in this case it would be two the eight bytes so I would need a single page table that's two the eight bytes because I need 256 entries. All right any questions about that one? Yeah yeah so you can also think of it that way. So if you want to instead of just thinking about how many virtual page numbers I want and doing the division well you know you have 12 bits for that virtual address in total and then you know that you know because of the page size four those need to be offset so you can also just do this and figure out that at the end of the day it's the same thing so just p2 that number and then times the page table entry size which might be different. Yeah yeah we try and use all the bits here yeah yeah yeah so if it's like a weird number like it might be like the only time you have unused bits typically will be if you have a multi-level page table and they don't quite line up exactly and then you would have some bits that are unused because you don't support that whole virtual address space but that's like the only exception. Yeah oh the tricks yeah so the tricks yeah I can only divide by two and multiply by two like at most two times so the only things you need to remember two the power zero is one and then two the power five is thirty two two the power of ten is one thousand and twenty four and then you can figure it out from that so two the power of eight oh well I only know two the power of ten which is one thousand twenty four to get to the power of eight I just divide by two twice so five twelve two fifty six yeah or put a table on your cheat sheet or I guess you're allowed to bring a calculator if you really want to two but you might be wasting time than just by knowing powers of two so thirty two two the power five is generally the only one we should need all right so yeah then the question shifts to the more fun part because single level page tables are lame so we could do multi-level page tables so next question is what is the minimum levels of page tables we need in our system assuming that each level page table exactly fits on a page so anyone remember how to do that yeah so in general remember the number of levels we need is like the ceiling of virtual bits minus offset divide index and to figure out the number of index bits we need we need to figure out how many page table entries we can fit on the page in this one well because every page table entry is just one byte well I can fit 16 of them on a page so my number of index bits is just four in this case same as the offset bits so in total my virtual bits from the question is 12 offset is four and then my index bits are four which would give me 12 minus four divide by four which is eight four and ceiling luckily that's a nice number because I am so nice and it's just a two so we need two levels of page tables for this any questions how I got that one yep so the index remember the index is essentially depends on the number of PTEs per page if I know that that would be and turn that into to the power of something if I log to that that's how many bits I need so in this case it's always the page size oops it's always the page size divide by the PTE size just like it was just a giant array but in this case my page size is 16 bytes and then my PTE size is just one byte so I don't have to change anything but in general that's the equation you guys because it's just a big big array all right are we good two levels of page tables all good all right so here's where it gets more interesting so we're going to translate virtual address one two three so in this virtual address we have two levels of page tables so I should have an l1 index and an l2 or sorry an l1 index and an l0 index and then an offset so in that virtual address one two three which number is which and luckily you will also note that I was nice to you and you can just leave it in hex you don't even have to translate anything because in general sometimes they don't line up nicely with hex numbers and you have to write it in binary and it's just a complete mess this one is nice because you don't have to translate so which of these hex characters is the l1 index yeah one right so this is our l1 index two is hopefully our l0 index and then three is our offset right any questions about that breakdown so that one two three boom those three questions basically tells you to read it all right any concerns about that okay so then it said for this virtual address we'll try and translate it so either the value of the final pte if it's valid and otherwise the value of the pte that causes a page fault so another part of this question says that the l1 page table is at ppn2 so I will highlight it in cyan that means d16 bytes here that represents my l1 page table so in this l1 page table if I'm translating address one two three what index do I use for my l1 page table well should be index one so where is index one on physical page two one f so that's where index zero is everything is a byte so there should be 16 entries in this page table this would be entry zero one two three da da da da da all the way up to 15 here so if we're translating that address well the l1 index is one so we would look at the byte at one f and then this we know is our pte so since this is our pte is this a valid page table entry given that layout of our page table entry no no it should be right so if we take this one f and then translate it to that over there well zero zero zero one more I could just leave in hex I'll put in binary because sure whatever is the ppn and then the rest are the flags so the execute is one write is one read is one valid is one so all of its flags are valid so it is a valid entry and since this is an entry in our l1 page table what does the ppn tell us is that the ppn of this virtual address no it's the ppn of l zero so that means that let's highlight it in green that these 16 bytes represent our l zero page table right so in our l zero page table what index should we look at while we're translating virtual address one two three so our l zero index is two so if we look at page one this is at index zero this is at index one this is at index two so it should be this byte right any arguments that that is our page table entry in the l zero page table oh why did just erase a bunch of stuff I can't go back that's better so it's yeah so whole procedure again so the question tells us we are translating virtual address one two three so that mean that also translates until we have to use one for the l one index two for the l zero index and then when we're translating it we don't have to touch the offset and the question also tells us where the l one page table is so l one page table is at physical page two so that corresponds to that thing highlighted in the cyan color and since we have to for this virtual address we have to use index one while we look at the index one entry which is this whoa that was a bad tool to use which is this page table entry so since that was a page table entry in our l zero page table we can check why does it keep erasing it whenever I look away so this means if we take this and break it out into the page table entry it means that execute was one right was one read was one valid was one so it's a valid entry so the physical page number is valid and it points to an l zero page table so it should be at physical page one which would be what's highlighted in green now so then I use that's my l zero page table so because I'm translating that address I look at index two and then the physical page or the page table entry there is ff which is valid and it corresponds to physical page f that we haven't used yet but that's the physical page number or page table entry we would use as our final translation because this is l zero we're done right so the answer to this question was be like the final value of the pte if it is valid it was valid in this case and the final value was ff if there is a page fault yeah so if there was a page fault I mean I could just make one by just doing this so in this case if I just change the page table the first page table entry in l zero to just not be valid there'd be a page fault in l one and that would be the failing page table entry I would get one zero because that valid bit would be off so it's a page fault it's not valid the rest of value yeah if valid is zero you don't read the rest of it it just fails immediately all right any other questions about that one all right so what is the final resulting physical address then so we were translating address one two three and then our final page table entry was ff which means it was valid and the ppn was essentially just f so what is our final physical address going to be for one two three yeah yeah zero hex f3 because remember essentially what we're doing all the time no matter how many levels of page tables we have is we're taking the virtual page number whoa that's some good writing so we take the address we divided into the virtual page number and an offset in this case our virtual page number was two one two and our offset was three and then all the time no matter what when you're translating it you're just translating it to an offset and then a physical page number so no matter how many levels of page tables you use it's all the same idea it's just how many steps you need to go through to actually get this physical page number that you actually want that is your translation so after two steps we figured out that the physical page number is just f so one two three would translate to f whoops wow that's a big eraser so we don't touch the offset so we figured out that virtual page number one two corresponded to physical page number f and we don't touch the offset so that means the final physical address is just f3 so any questions with that one and hopefully yep we were correct i still get to teach yeah sorry so why do i have only one f so this right here is the entire page table entry so that ff is the page table entry so given this it's divided into two parts so the first text digit is the ppn and the last one is all the permission bits so in this case the layout of this also doesn't matter i could have flipped it if i really wanted to and could have had the permission bits first if i want as long as you're consistent doesn't matter all right any other questions someone pasted a question that looks real fun yeah so yeah a page fault would just happen if at any stage in the lookup the valid bit was zero or if i was really mean so the first entry we looked at is like one f some of the questions are like fun we're like they'll put an entry here that's like eight f so that's valid but you have no idea what that memory actually is so like the answer could be like oh it's out of range i can't see what it is yeah yes so if i change it to one a or something like that yeah it would correspond to a is just one zero one zero so that means the valid bit would be zero which case nothing else matters no so in this case for real systems the no this is totally possible so your mmu it just checks the valid bit if it's zero it just ignores it so this is actually a way we'll get into later the operating system can actually take advantage of this so that means if it's valid you can store whatever the hell you want in the other remaining bits and you can use it for whatever you want yeah that's just the final physical address i didn't say what the value is or anything yeah that's fine yeah if i ask for the value it's like you know f3 is the address of a character or something like that and then if i asked what's the value of the character the answer would be like i don't know because you didn't tell me all right anything else so there's let me go back so there was a fun question that was posted in the discord that kind of looks like well this one too whoops so if you want we can do this question but it's from it's from the one eleven fall final and this is technically within scope for you guys because it includes threads but not data races or anything like that and processes so we can take a gander at this let me know if you want to go over this one or not and spoiler alert your exam kind of has threads on it but it's not terribly big yeah so this question basically it just says is pretty much just explain everything that happens here how many processes get made for this print statement show me all the results from this print statement so i want to start going over this and let me then stop me if you get bored to tears all right so let's just walk through what this program does so let's assume that we execute this we're executing i don't know process 100 it starts executing main first thing it encounters is a fork oh yeah yeah yeah yeah if it's not stated what the running processes state whatever that state whatever you want as long as it makes sense if you say one i might like be like hey that's kind of weird but it might be okay but generally one's the only one you should really avoid because we kind of know what the knit does so in this yeah i think all the time i just i specify a starting one just because it also makes it easier to grade and more consistent typically i always say just starts with 100 why do i like the number 100 i have no idea so in this case we hit fork immediately so what does fork do everyone remember so we create a new process right probably gets the id i don't know 101 so they're going to be exact clones of each other right now they're both executing main so nothing fairly important happens so we'd have process 100 and 101 and if i draw let's say i draw my family tree up here so i have process 100 101 should be a direct child of process 100 right so this is what my family tree should look like any arguments should it also like do that that's like the royal family tree so we don't want that all right so now we have process 100 and 101 they're exact clones of each other the only difference is going to be the return value of fork in process 100 what would it get returned from fork 101 and then it would create the variable called pid and then assign 101 to it in process 101 it would create pid and it would get assigned zero right so now at this point is any is process 100 guaranteed to run or or is it left to the computer gods so that just creates a new thread and then kernels up to schedule it as much yeah so it could be it could be a queue if you did your own but in general you can't guarantee it's a queue so if it's just a generic kernel you just have to say whatever the hell could happen because well if this is Linux you know it's a completely fair scheduler maybe you ran out of your time slice already and switches you immediately you have no idea so at this point we have no idea what runs say the main thread of process 101 continues executing well it will hit p thread join of thread one and then it will be blocked right so process the main thread of 101 is blocked waiting for thread one thread one to what to finish or terminate exit whatever you want to call it so at this point well also if i wanted to process the main thread of process 100 could run but that would probably make this even uglier than it already is so at this point process the main thread of process 101 is blocked on that p thread join so let's pick do we want process or thread one or thread two to run because it's up to the gods now we have no idea thread one all right so thread one runs oh no it calls fork anyone remember what happens if you call fork and you have multiple threads running yeah so you still create a new process but that new process only has a single thread of it which is a clone of whoever the hell just called fork so in 101 also have variables when i when thread one called fork the new process is a exact clone of that thread yeah no so process 102 exists through run so it is because all these threads like thread one and thread two in this case are running in process 101 so if you wanted to another thread could wait on 102 or something it's still available because it's still your child process just another thread made it yeah so process 102 is just a completely independent process that just keeps on executing so here if we want to write out what threads we have to in 101 we have a main thread we have a thread one thread two in 102 it was kind of like a copy of thread one if we want but it only has a single thread executing in it yeah yeah so in 102 like it clones the entire process all the virtual memory everything but like all the registers in everything are specific to thread one in this case so all of its local variables everything will just be copied so it'll just look like there's only one thread running now but all the other memory is the same if it access global variables or whatever it'd be the same as whatever the values were whenever it was forked so like a mean thing I could do is like create a global and then like essentially have a data race here and then if there's a data race the value of that will be different depending on the order of them before the fork and that's a whole mess so yeah don't worry about that but yeah it'll just be a copy at the time of the fork all the same fork rules apply exact copy all right any other questions all right so now at this point in thread one in process 101 what does it get returned to what does fork return for that one 102 so in thread one and 101 here I'll use a different color PID is equal to 102 and in process 102 PID is equal to zero so now at this point do I know if process 102 is going to run or thread one in 101 is going to run no idea up to the gods so which one do you want to do 102 all right so 102 will execute this print line so what will we see in this print line so it will print thread and then thread ID what is thread ID in process 102 one so thread ID is one and then it would say running and what's its process ID 102 and then in that case well PID is not greater than zero it is zero so it's just going to hit return null if you return from your thread function what is that the same as doing p thread exit right so it's like the exact equivalent for just the main function so if you return from main that's the same as calling exit and for your thread function if you return from your thread function that's the same as calling p thread exit so in this case if 102 goes ahead returns it was exact copy of that thread at the time of the fork so it's just going to call p thread exit and in process 102 there is only a single thread running and it called p thread exit so what happens if you call p thread exit and you're the last thread alive yeah then it just calls exit the process is now done so so 102 I can thankfully delete at this exact moment what is the state of process 102 is it a zombie is it an orphan is it chilling zombie right at this exact moment it is a zombie because it has now terminated but no one has successfully waited on it yet so 102 still exists but I'll just put an X beside it to say that it is terminated hasn't exited yet so now at this point let's say thread one in 101 continues executing it would hit this print statement what would it print so it would print thread what thread one running in process what 101 and then it is going to check is PID greater than zero yes it is currently 102 so it's going to call weight PID on 102 which will wait until it's terminated hey right now it's already terminated great so now we can clean it up it is now a just dead so here I'll just put it in this color so 102 is now just completely deleted we could also reuse the PID if we really wanted but we can keep our lives less complicated and just say it's just gone so thread one would go ahead and then return null so that means thread one in process 101 is now gone so is there other threads executing in process 101 yep so this thread's just gone it's technically a zombie thread right now but if we start executing 101 well it can make it past this join because thread one's now done and we just cleaned it up and we're process the main thread of process 101 is now stuck in join for thread two so any questions about that so let's see can I do this oh geez we're kind of out of time all right if I do this on turbo mode well thread two is going to do the same thing except create another process probably called 103 so we'd get 101 103 thread thread so that would be all them that's derived from process 101 and this entire thing is going to happen again for process 100 so process 100 is going to make two threads and then each of those threads is going to make a process and it probably looks something like this and then we'd get the same thing so thread one would print from process 100 thread two would print from process 100 and then thread one would probably print from process 104 and thread two from 105 but those numbers just come down to lock at that point as long as they're consistent so they'll be always a thread one and two from process 100 and a thread one and two from process 101 aside from that you'll just have different orderings of them as long as your numbering is consistent it doesn't matter yeah yeah technically if you wanted to you know thread one could run create a process clean it up and then thread two could run and then create another process with the exact same ID because we can reuse it so yeah if you really want to make your graders really happy you could do that technically it would be right they would probably look at it and you'd probably have to get corrected because they'll probably look at it and do like the typical pattern matching thing and be like no wrong and then you'd be like actually that you can do that yeah generally make the graders life easier and they'll be much happier and probably more lenient so like imagine if you're grading something if you're like grading like 10 pages of chicken scratch where it's like two sentences probably like the two sentences a lot more all right any other questions oh we only have a minute damn all right so oh yeah also for the Wednesday practicals I will probably be around in the practicals whenever the hell I get to Toronto so if you want to come ask me questions there I assume it'll be the day of the midterm and people leave things for last minute so you can come swamp me in whatever rooms those are there so with that just remember pulling for you we're all in this together and the midterm won't


Hi, it's Bridget. Welcome to Sunday Morning Coffee with Bridget. Today, we are going to have a talk about challenge. This came up to me the other day. I think it was in a live stream, actually. I was doing on Fairy Grasshopper YouTube. I did a live stream. I think it was on Fairy Grasshopper YouTube. The one when I was channeling the Divine Mother Mary, that would have been Christmas week, 2021, on Fairy Grasshopper YouTube. Or it might have been the live stream I did on Bridget Inspired, which Bridget Inspired is my Instagram and my Facebook, but it was a live stream on Instagram, Bridget Inspired. It might have been that when I was doing like a card reading.  I instinctively usually, I think I was doing a card, I think. Because the idea of like, I think I got a card and it says something about a challenge or being challenged. And I thought, that sounds hard. Challenge. Oh, challenge. That sounds really hard. That instinctively inside of me activates this energy of, oh my gosh, this is going to be tough. And then I realized, because words have so much power and so much frequency, and that's why I've been inspired to do this podcast is because I get really just magnetized and amplified and just words. I'm just like, oh, the words, words have so much depth to them and vibration and energy and meaning with the mind. And it's a great way to bring the brain into the spiritual experience and understanding of energy. I love, love, love words. And in this case, this is a perfect example of how the word can be utilized in different contexts to bring us different perspectives. We can use it to shift our energy. And so too, we're going to do that today with our Sunday morning coffee. We are going to shift the understanding of challenge as something that's like this hard thing. It means, oh my gosh, this is hard. This is harder. It's going to be hard into something that challenge could be something that's an invitation, could be something that invites us to consider things differently. It might be an invitation.  This one's mine, my current one right now. And this is actually linked below in the description of this video. Sunday morning coffee podcast is usually an audio, but today it's a video. Sometimes it's a video. And in the link in the description, you'll find this particular journal. Yep, in below. So grab out your journal and just take a minute to pause the video. Take a minute to write the word challenge and contemplate what it evokes for you. Does it bring forward controversial energy, conflict energy, or is it more of a pondering like a thinking energy, a contemplation or invitation energy? Just take a moment to do that. I'm just going to honor because you know I'm a psychic, right?  In my private session work, however, I focus on intuitive coaching. So I use a coach approach, a very kind of teamwork approach with you. I don't do psychic readings or that kind of thing in private session. But I'm really inspired right now to acknowledge a spiritual guide that's stepping forward, which is Archangel Michael. And Michael is a tried and true rider-dye energy for me who has been supportive with me from day one in my spiritual journey. And I'm really recognizing the energy of Archangel Michael coming in with this concept of challenge and honoring myself from where I started with this topic, feeling quite like, oh, that means hard. Oh, it's hard. Oh, great. Oh, great. Kind of a feeling reaction response when really what if challenge is an opportunity? And Archangel Michael steps in and is like, hmm, reassuring me like, okay, Bridget, okay, it's time to reframe this. So it's kind of like, and here's the energy that Archangel Michael is bringing in for me to share here is like the energy of challenge is like the energy of a sword. And I'm seeing an image because I'm very clairvoyant. So I see the second gift of sight. That's my primary channel. And then the empath, well, empath, empath energy and claircentance is probably my primary channel, but I always use my clairvoyance because it's just my go to.  It's not sharp and you just use it to open a letter, right? And Archangel Michael said, so that's a sword. It's not for a bloodied battle. It could be used as a weapon, but a sword can also be very helpful for clearing. When you're walking through the woods and you need to clear some brush off your path, taking that path less traveled, you use the sword to clear the way. And so to metaphysically use the sword to clear the energy from the past, which is usually here at the back of the head, the back of the neck here, it's the exit of the crop of the third eye comes out the back of the neck here. And then also the throat chakra, I'm just going to pull my scarf back a little bit, the throat chakra here. So you use the scarf, Archangel Michael literally to lift up and kind of cut the the cords and attachments. It's not a hard motion. It doesn't have to be a forceful. It can just be a gentle swipe, swipe, swipe, swipe, swipe. It's almost like a cake being decorated and and the the baker just putting the frosting over the top and kind of like a buttery knifing motion kind of a splatula like thing just sliding it with ease around that very beautifully and effortlessly like that. And you don't have to hack it or push on it or put pressure. You can if you're using it in a different context, but this is not the sword is not instinctively, it doesn't mean death. It doesn't have to mean bloodied or pain. It doesn't have to be a sign of power that is to be feared or invoke fear or grief or loss. It can be something that is useful, a tool and helpful to you energetically. Okay, so challenge is an invitation to consider things differently. It's not a big ask. It doesn't have to be this massive monumental shift or change. It's not requiring anything of you. And yet we equate I know that I equate the word challenge with struggle. And I feel like struggling is bad because it exhausts me and it wears me down because haven't we all been struggling for the last few years? Isn't that what's been happening? Isn't aren't we just worn down from that? Aren't we? Struggle is not bad. I had a life coach a few years ago that I worked with a horse coach and intuitive. She's very intuitive, very healing coach. She works with natural lifemanship. And she said, struggle isn't bad Bridget. Struggle is like normal. Struggle is natural. That's how you learn. I'm like, oh, struggle isn't the same thing as pain. Struggle isn't doesn't mean you're doing something wrong. In fact, the fact that you're challenged or the fact that you're struggling with that challenge could very well mean that you're doing a lot of things right. You're in the right place at the right time. Just because something's hard or difficult doesn't mean it's wrong. It doesn't mean it's bad. It means it's hard or difficult because you maybe don't have those skills yet. You maybe don't have that perspective or that understanding yet to put this into context. So it seems hard. It seems very challenging. But as you move through or work with that circumstance situation, lesson information, you gain the skills, you gain the muscle to manage, to cope, to handle, and to improve upon whatever area of your life it touches. It might be all of you, the whole of you. So without the challenge, we don't have the ability to know more about ourselves, to discover more about ourselves, to learn more about ourselves. And it doesn't have to be hard. A challenge can be something that we're up leveling. And something's hard because we put ourselves in this situation where we're growing, growing, going, going open to experience new things, to learn new things, to learn about new things, to meet new people, to go new places, to discover. And the newness about the discovery can be a challenge. The newness, the unknown in the process of the learning can be the challenge that can represent the challenge. And the challenge is often unknown or unproven or unidentified, not yet revealed and or not yet understood skill, attribute, trait, part of yourself that you've never met before. And so challenge can be a whole host of different things. It doesn't necessarily mean good or bad. And it doesn't mean you're doing something wrong. You shouldn't, and it doesn't mean you shouldn't do this. There used to be kind of this understanding in psychic work and spiritual work, even coaching or really just intuitive psychic work for sure, where there's this kind of assumption, which is a myth, where, oh, if it's hard, it must not be right for me. If it's too hard to do, or if there's roadblocks put in my place that's like God universe saying, no, this isn't for you. And in some cases, that might be true. But in many cases, it's just because you haven't had yet been faced with the opportunity to learn more about yourself, to bring a part of yourself forward that is needed for that situation, that is needed in order to continue along the path. And so in order to continue along the path, you have to pause for a moment, regroup, look in, get reflective, get introspective, and find whatever tool, whatever barrier or resistances is there, healing, working with it, being willing to lean into the difficult feelings, or usually it's feelings. That's just to be straight. It's usually difficult feelings, right?  They have no idea what it's like to be you, really.  Who knows better than them? You. Who knows you better? You. So the challenge, the resistance that you come up against just means that there's some part of you that needs to come forward to be able to meet that challenge, to meet it, to be a good match for it. And that is when you can continue to move forward. So when you're challenged or you have resistance, it doesn't mean stop. It's the wrong path or the wrong choice. It means you're in a place. You've been given an opportunity to go deeper inside you to find what you need at this moment in time to meet and greet the challenge, not to fight it. No fighting. Stop the fighting. Stop the chaotic energy inside. It's not worth it. It's just not worth it. It is distracting you from the experiences of life that you've come here to embrace and embody and to share with others. Opportunity to find, to discover, to meet something in you, to bring forward, to match the challenge, to unite with the challenge, to unify with the challenge, and then to grow along the journey until the next one. Wow, that was good stuff. Let's have some coffee. This is my merch, by the way. Do you need some hope in the new year? Do you need some hope at this moment? Maybe you should check that out below. This is Bridget. It's been my pleasure to connect with you today. Thank you, Archangel Michael, for showing up. Put the word challenge and the energy of challenge for us and the potential meaning for you. Make sure you use your journal, like I suggested, and ponder what this means for you. I hope I've inspired your spirit today, filled you with some hope, encouraged you to live your life after all. That's what the job is that's what I do here on Above Life channel on YouTube. I hope to see you on my Fairy Grasshopper YouTube channel where I talk about all different kinds of intuitive things. I do card readings over there. I do vlogs. I do live streams over there also. You can also find me on Instagram and Facebook at Bridget inspired as well. Sometimes you do live streams on Instagram too.  This is your life after all. And do you get to live it? Just live it. Thanks for being here.


After the first and second movement, for the first time we feel complete joy and this movement is exuding that from the very beginning. I think the most important tip I would have is to prepare for the right tempo. There's a very big danger of starting too fast and this is a movement where it can get very quickly out of control so it makes sense to give yourself or almost self-conducting your mind two bars before actually starting to make sure that you're at a comfortable tempo. One thing I would also do in the second bar is to give myself this impulse on the second beat. This is first of all to ensure that one doesn't rush and also to give yourself another reason to be very stable and you can do that by giving an audible breath or at least by feeling this beat with the rest of your body and that can be repeated throughout the rest of the movement.


Hey everyone, it's Gabrielle with Oxford Auto Group here today at Oxford Toyota. I have Chuck Schumann here with me Hey guys, so you guys he's gonna be going over 2019 Toyota Tacoma. This is a TRD pro So Chuck if you want to tell everybody what's cool about this it'd be great a lot of cool things about this So the 10 or the Tacoma is already the best-selling truck like in its class already a very rugged off-road vehicle But the TRD pro takes it up a level. This is the most off-road capable Factory built vehicle on the market. So if you see down here that you got that skid plate with the TRD Imprint on it. It's a quarter inch skid plate protects the engineer all that underneath. This also has TSSP So a lot of safety features up front. It's got the TRD grill. So it's a mixture styling It's got the rigid industry fog lights there super bright LEDs Daytime running lights that are bright as well get people's attention. It's just an aggressive look You got the hood scoop there. You also got these great 17 inch black alloy wheels here with the Real beefy Goodyear Wrangler tires and also you see there in there. You've got the Fox So Fox Industries, which is the best, you know suspensions, you know springs coils all that they worked with the TRD Engineers to build this and design it specifically for the Tacoma And so for the pro you also got the badging so red stitching you got leather seats These are heated all kinds of luxury features in here and this also has crawl control multi-terrain select So when you go off-road this car can actually control the tire spinach and slippage to keep you You know gets you out of some sticky situations, right? Just a really really cool off-road capable vehicle these things we don't see them a lot They're pretty rare. So it's always exciting to get one on the line, right exactly. Yeah, it's really nice looking All right. Well, thank you so much. All right you guys So if you have any questions out there if you'd like to stop in take a closer look if you want to take one for a test drive Just let us know you can give us a call now that best phone number. It's five zero two two one four seven zero eight five Also, make sure to check out our new express store. It's on our website oxmortwayaudet.com Thanks guys. We'll see y'all soon. Bye


If you want to make quicker decisions on the field, if you want to be a better decision maker, you want to play faster, you have to actually know what you should be doing when you have the ball in possession and when you don't have the ball when you're out of possession. So many players have no idea what they should be doing, so when they actually get the ball at their feet, they just panic or they make the wrong decision or they miss out on an opportunity because they don't know what they should be doing. Now, I'm just going to go through this really quickly to simplify this for you. When you're in possession, can you get forward? If you can get forward, get that ball forward and join in the attack, move forward, okay? So play forward with your passes or play forward with your dribbling and move forward with your movement, okay? So when you're in possession, can you play forward? If you can, go forward. To score goals, you have to go forward. So there's no sense in going sideways and backwards when you have the opportunity to go forward.  Maybe you have like a two-nil lead or something like that. But even still, I think you should be going for goals. It's more fun that way as well, okay? So if you can't go forward, for example, you get closed down. Instead of forcing it, trying to take on three guys when you're all by yourself, realize that, okay, if I try to go forward here, I'm probably going to lose possession. So you want to go forward, but you want to keep possession of the ball, okay? So very simple when you're in possession of the ball. So you know what you need to do when you're on the field. If you can go forward, whether by dribbling into space or by playing passes and combining with teammates, you need to go forward. You need to get forward. However, if you cannot get forward, you must keep possession of that ball. Do not give this ball away cheaply. Do not force the play.  If the option is there to go forward, then yes, go forward. Should you still take guys on? Absolutely. If that's the right decision and beating this guy will allow you to put across in the box or beating these guys will allow you to get a shot off, then go forward. But if you know it's a wrong decision, it's not likely that you're going to succeed by trying to go forward, then turn, keep possession of that ball. I quickly want to talk about the defensive side of decision-making as well because that is decision-making. That's a very important part of your game. If you think decision-making and playing quickly is only what you do, when in possession, you're missing out on half the game. So quickly, let's just go through a few ideas. I made a video on this recently and I'll put a link in the description of this video. But I said, when defending, you should ask yourself two questions. Number one, where should I be? Number two, what should I be doing? So where should you be? Well, when your team is defending, you want to be in your team shape. So let's say you're playing five-a-side. This applies to seven-a-side or 11-v-11. It's all the same ideas. What is your team shape? Let's say you play a 2-2-1. So as soon as you lose possession, let's say we went forward and we lost possession, we quickly want to get back into our shape. We want to get close together so now we can defend together. If we're spread out like this, it leaves massive gaps. So we want to get close together as a unit in our team formation. So what is your position and where should you be in your team's formation? That's where you want to be. And as the ball moves, we move together. So if that ball moves out here, we move together. So you're always thinking about where's the ball and where are my teammates? I need to move in relation to both of those things. So as that ball comes to the other side, we all shift and we all stay together. So question number one, where should I be? Question number two, what should I be doing? If you are the closest player to the ball, you should be pressing the ball, okay? You should be forcing him to make a mistake or forcing him to go backwards. He cannot score if he's over here. Our net's over here. If we keep them over there, they're not going to have a very good chance of scoring on us. Okay? So pressure that ball. If that ball comes to you and you're the closest to the ball, pressure that ball, okay? What does everyone else do? We think about the next pass. We think about where this guy may want to play and we stay in our formation and we close those passes down.  You want to anticipate that that ball's coming in there and then you can cover like that and then everyone comes back into our positions. Okay? But if that ball gets played there, you're the closest there. You press. Everyone else is thinking about where the next pass may be and we're moving up together like this, okay? You can see everyone is covering the next pass. This guy closest to the ball is pressuring the ball, forcing him to make a mistake or forcing him to go backwards. These ideas are very simple but very important. If you don't know about me, I used to be a huge underachiever. But through obsessive self-improvement, I found my success. Earned a college scholarship, played for my national football team, a YouTube channel with over 100 million views. I've helped players worldwide and I'd love to help you improve faster and achieve more. It's impossible to play quickly if you're not ready to react. So standing flat footed on your heels is a bad habit you want to stay away from instead. Always focus on being on your toes ready to react at any moment, especially when you do not have the ball at your feet. When you do have the ball at your feet, you want to be quick and sharp with your movement. Focus on your movement as much as your touches. As you see here, this is what some players do. It's just too casual, too relaxed, too slow. If you want to make quicker decisions, also focus on being quicker with your touches, quicker with your changes of direction, quicker with your passes.    This is what I see all the time is players just watching the ball. They don't know what's behind them. They don't know what's around them. They're just focusing on the ball. You want to stay away from this bad habit.  Be aware of what's around you. If you're receiving a pass waiting for the ball, know what's behind you. Know what's to the side of you. So using your head, shoulder checking all the time, just gathering more information is going to help you make better decisions.  If your head is down, just looking at your ball, you can only see what's in your peripheral vision. You can only see two yards around you.  But you can't do that if you have your head looking at the ground.  If you want to improve faster and achieve more this season, use the Soccer Success Planner. It's 100% free. Players all around the world have already used it to improve. You can download it right now. There's a link in the description below. Another thing I strongly suggest you do is watch professional football and watch a lot of it. Players can teach us so much if we're just willing to sit and watch and analyze what they do. I can't understand players who say things like, I don't like watching soccer. I just like playing it, or I can't sit through a full game.  Chances are they probably aren't the smartest players either. Honestly, the smartest players that I've ever played with are usually the players who watch the most because they've learned how to play the game properly from the best teachers in the world. So if you want to become a smarter player, watch, but analyze. And what do I need by analyze? While while I'm watching the game, I'm not just watching the ball. I may pick a certain player and I'll just watch him to see what he does in certain situations. Which types of runs does he make when his teammates have the ball? Which spaces does he try to get into? What does he do when he doesn't have the ball? Which defensive positions does he take up? So focus on his positioning and his movement as much as what he does on the ball, when he has it at his feet. So also when he has the ball at his feet, you want to think about, okay, what type of decision did he make in that situation? Did he dribble there? Or did he play a little 1-2? Did he try to go forward? Or did he turn and keep possession? Okay, so just by watching and analyzing, you can learn so much. And yes, analyze technique while you're at it. And the great thing is you can rewind. So I might rewind the whole play. Maybe let's say a goal happened and maybe the fullback had a really good contribution in that goal. I'll rewind the whole thing and I'll watch from the very beginning, okay, where did he start? The play started way over here, but he started on this side and he made a run all the way up and then he made a little combination. He whipped across into the box. Okay, so rewind, use rewind to your advantage and you can learn so much about decision making and certain positioning and just what to do on the field in certain situations will help you so much. Another great idea is watching analysis shows. So the show that I watched the most is football today. There's Sky Sports has some, there's lots and you can even search on YouTube for football analysis, but it's basically professionals, ex-professional players analyzing professional football. So they give you their opinions and they break down what makes players successful or which players, what players are struggling with at certain times. So it's a really great insight into what it takes to be a smart and good player. So really use this to your advantage, watching football, watching live games and also watching analysis shows. The final thing I want you to do if you want to become a smarter player is review your performances. So whether you had a practice or you had a game, usually at the end of the night, let's say I had a game, I'll be lying in bed and I'll just think of everything that happened in that game and I'll review every play that sticks out in my mind. Okay, some I may have made mistakes, some plays I was successful, but if you just play and you don't review, you don't think about that experience and learn from that experience, you'll never become better, you'll never become smarter, you'll just make the same mistakes again and again, so you really need to be your own best teacher. So at the end of the day, as I said, usually when I'm in bed, I'll just be laying in bed and I'll think about the game and I'll review all the plays in my mind and I'll try to think about what I should have done differently when I made mistakes and I'll remind myself to keep doing certain things that worked well. So if you really want to become smarter, learning to review and analyze yourself is so important. From moving up divisions to making national teams, players who use the Online Soccer Academy get results. Access elite level coaching and training, become a complete player, make a difference on the field and get noticed when you play. Limited spots available, apply today, start improving tomorrow, link in the description below.


This is TFNN, The Tiger, Financial News Network Update. Good morning, everyone, Basel Chapman here. This is the Tiger Financial News Network 10 a.m. market update, 1,226, 35,533 after a really two ugly, ugly candles. But what's fascinating is the nine-period moving average still hasn't crossed negative, and that tells you the strength of this particular indicator, because it tells you there's still residual strength, at least for the moment, until it crosses negative. So we're watching this closely looking at the S&P same thing. S&P is up 32 at 4,088, hit the 50-period moving average as well. The Chapman wave inside wedge target support line, now it's balancing a little bit, and the nine-period moving average is close to turning down, crossing pink. Hasn't done it yet, because the QQQ is trading at 315.37 up 350, and that's with all the news. Yesterday was Chipotle, and today it's Meta. All of these are part of the S&P and the Qs, actually. What happens is you've got 315.45 up 350, and it's now slightly above. It went pink yesterday, the nine-period under the 40, but there's a nice bounce today. Look at the weekly charts, in a rectangle here, doing quite nicely actually. IWM Russell, $2,000 up $1.72, it doesn't look very good. Now, this is going to be very interesting, because gold is pulling back a little bit. Down five at 1990, as I said, I think it's in a consolidation phase. We're starting to make lower lows and lower highs, and that just makes this whole area here. The key support will be initially at 1970 and the 1950s, we'll see what happens there. The dollars are tempting some kind of a rally here. Something's wrong here, it says it's up four at 101.68. Anyway, it's at 1.168, it's up a little bit. I'm not sure where that number comes from, but it's trying to rally, and if the dollar actually manages to get to the 102.78, 103 area over the next two weeks, that's going to, I think that could impact the market, but this is a bounce for now.  Remember, I said, rectangle formation and the 200-period moving average resistance at 1.32 and a half, that's potent. And we're looking at crude oil, crude oil is trading up just a little bit. I'll be back with the Tiger Technicians out. Check out on Wednesday this coming week for subscribers to my opening call. We've got a webinar coming up, it's going to be really important.