All right welcome quiz three review. So let's go through it quickly just a brief overview of all the topics What's on it, and then we'll do a sample question from from the final exam from? 2016 or something like that, which will probably be much more difficult than what's actually on the quiz So the quiz will probably be difficulty and distance what or length wise probably be between quiz one and two So quiz two didn't have very many questions, and it was kind of brutally long The questions that were given so and quiz one was really really short. So this one will be somewhere in between So it's going to cover four general topics scheduling page replacement page tables and the TLB so the translation look-aside buffer and General virtual memory questions a slew of true false or multiple choice ones So there won't be any sockets or anything like that because that's what we went over recently So just to remind you scheduling that's the thing that had a bunch of trade-offs We saw non preemptive ones, which you probably are pretty lame to ask on a quiz like first come first serve or shortest job first Then we saw two main ones when we had preemptive chins so we could change what process is currently running We can context switch to it at will We saw shortest remaining time first which optimizes the lowest waiting time But has an issue with starvation So you should know what starvation is where a process might not be scheduled because other Processes are already shorter or something like that and a long-ranging process may never be scheduled Then we saw around Robin everyone was really really bored everyone seemed to get it So won't go over, but it might be like hey here's some processes What's the schedule? Then we saw it even more scheduling algorithms The most you would see on the quizzes like we went over that dynamic priority scheduling example So that's another thing of hey Here's some processes which one's running other than that. It's fairly general stuff So like, you know some processes there's no one good Scheduling algorithm different processes need different things So if you are interacting with the process you want good interactivity good response time If it's just a batch process doing some computations You don't care you want to process as many of them as possible in a given time So you might care more about reducing the waiting time there and those two things are definitely at odds with each other So it's going to be no perfect solution We saw real-time all the difficulties that come up if we have multi-processor systems So either we have a big global queue and have to do locks or we have different scheduling algorithms on each for each individual CPU Then we saw ideally it's fair That's the idea behind the completely fair scheduler that's actually used in the Linux kernel But the Linux kernel stuff you're not gonna have to do scheduling that the Linux kernel does on a quiz or something like that So then we went into page tables page tables just translate virtual to physical addresses So we'll have a example today that will be harder than probably what would be on the quiz Modulo maybe We use multi-level page tables on the quiz cough cough but For page tables What you do so there's the MMU that's the memory management unit That's the hardware that uses page tables and does the translation So we could have either a single large page table which may be wasteful because it would have to be able to hold all the entries for every single possible virtual address and Processes unless you know your Chrome or VS code or something like that You're not gonna use all the the virtual addresses so you most processes don't actually need all those entries So a lot of it is actually wasted space So we looked at Multi-level page tables to save space idea behind them was each smaller table fit exactly on a page And then we just followed it however many levels we need to in order to find the allocation so we need for For one to resolve one address We need to have at least one page table for every single level to resolve one single address Which is still going to be way less memory than You know every single possibility And then if you're the kernel you only allocate pages or at memory in pages And you could do it with a simple free list or something that and the TLB is just the translation look aside buffer It's basically the cache from virtual addresses to physical addresses And we'll have a question at the end to see if we understand that Then we did page replacement everyone was really really bored about this Hopefully everyone can do this so given some page accesses. What are all the faults? That is a perfectly valid quiz question. It's like the algorithms you could do you could do optimal So, you know you replace the page. Let's use less in the future to get the most amount of essentially Accesses that are still in memory then random that obviously wouldn't be on the quiz because how the hell we're going to mark that and then FIFO so that's easy to implement first to come first or first in first out And then that had that weird anomaly where we had less memory and also less page faults Pretty much the only thing you care about in replace page replacement is minimizing the number of page faults So that was a weird thing with FIFO and then we saw a least recently used which gets close to optimal expensive to implement But for the purposes of the quiz you could probably do it. Yeah Yeah, so I don't think the other course actually went over the clock algorithm So there's probably not gonna be a question of like hey here is a schedule using a clock algorithm Tell me the number of page faults So I don't think the other section section one never did it So the clock algorithm is like it's in the idea of least recently used but it's not exactly recent Least recently used it's an approximation Well for the quiz it'll be like hey, what what are all the Tell me all the page faults if I use least recently used or tell me all the page faults if I use optimal Tell me all the page faults if I used FIFO Yeah, I don't think we have enough TA hours to do that so Yeah, so wouldn't be something like that Something mean to waste your time would be like hey do this for all different algorithms and tell me the answer But like optimal is gonna be better. Yeah It's gonna be in between so there's gonna be at least You know a big page stable question and probably a big scheduling or page replacement question and then a bunch of more multiple choices So and the multiple choice won't be essentially a long answer problem So either two or three long answers. So Scheduling put page replacement. They're kind of the same boring thing We kind of know how to do them and then probably page tables and we'll see a page table question and yeah, just for Giving terms to stuff so pages When it's on disk typically it goes into something called a swap file. So that's a Name you might run into in the multiple choice So the a bitmap is basically yeah So all the pages on this are in a big swap file and the swap file is what's all the what holds all the pages on this Yeah Yeah, so frame physical page page typically means virtual page. You could call it physical page You could call it physical frame. You could call it frame. They essentially all mean the same thing In the context of the question you should know understand what it's talking about but you might see different terminology And yeah, so quickly bitmap. So it's what slab allocators use. It's what Anything that allocates of a fixed size use just to be more explicit The bitmap itself is going to be contiguous block of memory that tracks slots So however many bits you have is however many slots you can track For example, if you have a bitmap that is 512 bytes Well 512 bytes times 8 that is 4096 bits. So you could keep track of 4096 slots So bit 500 would be slot 500 and you could do the math So if you wanted to check what bit 500 was you could see what byte you need to check by just dividing by 8 And then you take the remainder to see what bit you have to check and that's how that works Okay core map we didn't talk about and they didn't talk too much into detail of it But it's a data structure you should know Basically, it just manages the physical pages or frames again interchangeable So it keeps track of what processes are accessing what frames mostly in order to actually deallocate it properly So because we have two processes and we could have shared memory. So two processes could be Sharing the same physical frame from their own different virtual addresses So you have to keep track of how many processes are actually referencing a frame And that the core map is the data structure that does that So each frame would track what processes are pointing to it And when you deallocate it you would that process would no longer be pointing to it And if no processes are no longer pointing to it, then you can finally deallocate if you're the kernel. Yep Yeah Yeah Yeah, so this would happen on forks This would happen like you'd be sharing pages on forks. You could explicitly share pages to do shared memory But we haven't seen how to do that But it's not out of the realm of possibility where two things could map to the same frame and then actually share memory without Doing that copy on right thing Yeah Yeah, it could be a hash table. It could be Yeah, it's just figuring out given a frame what processes are pointing to it Yeah, okay So here's other things that might appear the multiple choice and good things to know so rough Latencies so cpu cache will be nanoseconds memory is like hundreds of nanoseconds or a micro second Which is a thousand times slower an ssd, which I think the quiz is old so they don't know what an ssd is so But that would take like double digit microseconds and then disks or hard drive like the spinning things would take up to milliseconds So that's why doing page replacement is bad and it's so slow because it would take milliseconds Which is like a factor of a lot different. Yeah So there's a lot of cache For doing the translation the cache is called the tlb But like there's caches for memory like your l your l1 cache and your l2 cache on the cpu Which doesn't quite correspond to the l1 and l2 page tables But that's a different thing just to make life confusing But that's like cache on your actual cpu But the only number if you get into the multiple choice and it's like hey, how slow is something It's probably asking about a disk. It's probably milliseconds So that's a good number to know All right last thing I didn't touch on but we kind of talked about it a little bit is spatial versus temporal locality And spatial locality just means accesses are close together in memory So they'd be contiguous or almost so if two memory accesses If you know two pieces of memory are accessed together Hopefully they are located together So they would at least be on the same page if not contiguous and that way you only have to do one Virtual memory into a physical translation and then there'd be a cache hit and it would be in the tlb So every other time you access either address it would be cached. It would be nice and fast So that's just each other in terms of space then the other is temporal locality It's being accesses close to each other in terms of time So if two accesses are close to each other in terms of time, they're kind of Related somehow and you would want them to also be located close together to be really fast But they're two separate things so things could be accessed close together in time But not located together and things could be located together, but not accessed at the same time Ideally you would want things to be Everything that is accessed together at the same time is close together, but they're two different things Okay, so we didn't give this a name, but we kind of talked about so thrashing is when there's a high number of page faults So when a process cannot have their working set in memory and a working set Is just the amount of memory a process needs to execute without any page faults at Given some like short time interval. So it's just how much memory it needs In order to actually run successfully without hitting any more page faults So if your working set wouldn't fit in memory It means that under normal execution that you would have a page fault And then you would have to do page replacement, which would go to disk which would be really really slow So if a process is constantly evicting pages, it's going to be really really slow And it's something you don't want So if you're the kernel you can kind of detect this by keeping track of the ratio of page faults And if it gets too high, maybe you just go ahead and deallocate memory from another process and You know pick a page from another process in order to give more memory to this current process It's trying to execute because it needs more memory And you actually want to clear it up a little bit give it more memory So it's working fit set can fit into memory and it's not constantly swapping out to disk all the time So the kernel could do something like that, but you might see the term working set on the quiz Okay, demand paging this is another thing that we didn't give a name to that we just kind of talked about So this is the idea of doing things lazily. So whenever you start a process or something like that You would assign all the virtual you'd set up all the page tables with all the virtual addresses But they wouldn't actually go to physical memory yet until their first access So if you're the kernel on the first access then you would allocate an actual page And then you would modify the page table entry to make it point to that newly allocated page So the flip side of this is if I didn't have this I would have to allocate all the memory for the process as soon as it starts And allocate all of it even though it might not ever use it and also that would be really really slow for starting up So then kernel can go ahead page fault figure out back it by an actual page And then during this too, it might not always Back it by a physical page if you're doing demand paging because that process as we've all done before could just access Any old virtual address that doesn't that isn't actually valid to access and then When it gets a page fault, it would just send a sag fault back up to that process and then we get our fun sag fault We've got So that's it for demand paging And then we have copy on right and then we'll go into our example, which will take most of the class So copy on right we've talked about this is just to make sure we get it So the idea behind this you can also you know do other interesting things is Same idea with data races if there's only reads to pages Then we're allowed to share them as many times as we like there's essentially no data races everything can be shared for free So When we fork two processes can share the same frame and then either could write to them But again, we want by default we want things to be independent So if you're the kernel you could go ahead have them share the same frame And then if either process tries to write to it then you would You'd essentially turn the right permission off. So you get page fault. So then you can service it So when you see that you would then and only then copy the actual physical memory of the page and have one page with the Modification map to the process that made the modification then you leave the other page alone and now the other Process can go ahead and write to it later if it wants to So this can also have some optimizations with read only frames if we're doing page replacement so For example assume that like our process is running. It's executing some code. It's only reading code over and over again So it would be loaded into memory It would be loaded into a page and then maybe we decide to evict that page that just has code that's being read Well, it's a bit of a waste of time to write it back out onto disk when that actually already exists In disks somewhere where that original file was So instead of writing that essentially read only page back to disk Only to write it back out to disk only to read out some information. That's elsewhere anyways I can just go ahead and reuse that page and then I can just go ahead if I need to Use that or swap that page back into disk. I'll just reread that file again from disk since it's there anyways Yeah Yeah, this is only possible if it's a read only page Otherwise it would have modifications and then you actually have to write it back out to disk if that's your only copy of it Okay So this is what we'll take a long time. So this question is a bit weird and we'll take most of the class so This is a bit of a weird one because we have it talks about tag tlbs which We talked about briefly, but this is a full example of it and tag tlb just means that So every process has its own virtual address range. So in the tlb There's also a spot where you can attach the process id that that Virtual address is valid for So let's go ahead and read this question So we have an early 16-bit processor uses a single level page table That's a slight sigh of relief. That's not a multi-level page table, but you should probably be prepared for one of those But anyways for this single level page table with 250 byte pages So anytime I see Some numbers Good practice is to just write the equivalent power of two just in case So what's 256 in powers of two? Oh no Eight to the eight so luckily that's the same as a byte To the eight So it's a number of values. You could have it in a byte. So to the eight So maximum, you know physical memory it can support is to the 16 so Now we know how big our physical frame number is so this is how many Bites our own machine so we have a 16-bit address here So then it shows us the tlb and the page table entry have a the following format in the tlb There is the virtual page number And then essentially after it is the page table entry And here we're used to seeing ppn like physical page number. This is just pfn, which is physical frame number Means the same thing So there is a in the page table entry. There is a physical frame number. There's a process id And then there are four bits. There is a bit that says If it's in swap and if it's in swap the Physical frame number should be interpreted as a swap location Um, and it only looks at just the valid bit is zero. So there's also a valid bit A reference bit Or sorry, not a reference bit Oh, there is a reference bit, but it's not used. Oh, sorry So reference bit is just if it's Currently referenced in the tlb. We actually won't use it in this It just lets you know that that entry has been referenced before So so that it's actually backed by a page. So it could be valid but not actually referenced so It could be a valid virtual address, but it doesn't actually point to a physical page yet. So you need to fix it up But don't worry the reference bit's not here. So all we care about is in the page table entry There's four bits here in the tlb. There's four bits here. So it's just four bits of space Okay First question is calculate the maximum number of processes whose page table entries may exist in the tag tlb at a time Which is other words of saying how big is this process id in terms of bits? So we have to do some math here So we have to figure out how big the physical frame number is in terms of bits Anyone hazard a guess as to how big that is So this is this machine has 16 bit addresses And the page size is 200 and 56 Sorry 256 bytes. So if we write out an address It would be offset and then you know Our physical frame number if this was a physical address. So how many bits are in our offset? Eight bits The total thing on this machine is 16 bits So how big is the physical frame number? Eight bits So it's just eight bits No, we're just figuring out how big the physical frame number is without looking at anything else So the physical frame number it takes up eight bits So now we can go back. Yeah Uh the offset. Yeah, so It's how many bits you need to Essentially address every single byte on your page so If my page is 256 bytes Then I need eight bits to be able to reference every one of those So I need to point to all the values. So I need to be able to go from zero to 255 Yeah, yeah this thing here Yeah, so that's our physical address made up in two parts the physical frame number and the offset So now it says the page table entry size is two bytes That's good. So These are four bits right here the permission and now we know this Physical frame number is also eight bits and then we know that the total thing Is two bytes or 16 bits So how large is this is the process id? four bits Half a biter. Isn't there a name for it a nibble or something nibble? There we go. It's a nibble so That's such a stupid name So, yeah, so we can So we can we have a nibble for our process id so that means we can Essentially the maximum number of processes we have is two to the four So that's how many different processes we could have. What's two the four? 16 15 plus one that's a roundabout way to get to it. So 16 processes max okay Now it says what is the maximum size of the swap area that is supported? well, so it says That because it's a bit weird the physical Frame number should be interpreted as a swap location So there's going to be Up to two to the eight entries because there's eight bits in our physical frame number And then each of these would be a page So a page is also two of the eight So to the eight times two the eight would be two to the 16 To the 16 as long as I can do math So that's like two the six kilobytes because two the ten is a kilobyte Sorry So this is the page size And then this is the number of swap entries so Yeah, two the six kilobytes would be 64 kilobytes Because it says the physical frame number should be interpreted as a swap location So there's just two the eight possible swap locations The page size What's s? Yeah, so it's a bit in the page table entry that just says whether or not that virtual address is currently in swap Yeah, yeah, it's pages in the swap space Yeah, yeah, it's just a bit Yeah, it'd be in the swap file Just because just because it says yeah Sorry No, so that memory it can support is just how many different bytes you can address Physically, yeah Yeah Yeah Yep. Yep. So it's just converting all right Uh processor takes a supports a limited number of physical memory. No crap as a result Okay, this is where it gets really weird. So page tables and floor processes are packed into a frame Yikes So this doesn't quite Have our tricks. So this is not multi-level page tables or anything So what it's saying is on a single page is actually four page tables And then you have to figure it out yourself So here it says process five would use the second chunk if you actually want to implement it It would actually be a disaster, but I guess since we're writing it on paper we can roll with it But it's kind of weird So what then it says what's the maximum amount of virtual memory that is available to each process? So this is where it gets a bit weird so each frame is Or page size is going to be 256 bytes So that means we divide it into four because each of these has four page tables, which is kind of weird Which means If we have this we have 64 bytes In our page table Yeah, one page table is 64 bytes So then it says what's the maximum amount of virtual memory that is available to each process while 64 bytes That is the same as two to the six. No, yeah two to the six So we could have two to the six entries Yeah, we'll always assume byte accessible memory Yeah, so this will be to the six or did I screw up the division packed in frame That's right. Okay Uh Was the maximum amount of virtual memory that is available to each process? So it's essentially would be that times to the eight In the virtual page them Yeah, um Wait one sec. Oh, sorry. I messed up. Yeah, that's where I messed up Okay, so I messed up. So that's how many bytes are in a page table, but yeah Yeah, that's where I screwed up. Okay. Yeah, so there's There's 64 bytes in my page table and then I forgot to keep track of my page table entry size So it's two bytes So that means that if I have 64 bytes in our page table and my entry is two bytes That means I have 32 entries In my page table Which is actually which is why I thought I messed up to the five so Then to figure out the total amount of virtual memory it'd be to the five times to the eight Which would be our page size which is two to the 13 Which would be uh Eight kilobytes Okay, then it says if the processor uses 64 bytes for the tlb Was the maximum number of tlb entries that can be stored in the tlb This is where we will go into the land of completely implausible so This is the maximum. So we have 64 bytes For our tlb Which is also 512 bits Why am I doing bits? Well, they want to make it difficult So in their tlb Each tlb entry the virtual page number or virtual page number. We figured out how many bits that is. So this is five bits Then the physical Frame number would be eight bits Process id is four bits And then all the permissions here are also four bits So if we add that all up how big is our page or sorry how big is our tlb entry? 21 bits Which is yeah, so it's essentially going to be 16 plus five So it's 21 bits, which is how you know this is not feasible to implement so It's saying the maximum number you could theoretically fill out But you couldn't implement this on You could implement this but it would be a disaster because you'd have to shift bytes all the time or shift bits all the time And be kind of terrible, but I mean you could do it if you're super space constrained So this is like 24.3 or something like that. So we'd have to round down So we could have most 24 tlb Entries Max Okay, weird question The 21 is the size of the tlb entry here So five plus eight plus four plus four Yeah, I just changed the it said 40 64 bytes for a tlb. So I just changed it to bits So 512 bits divided by 21 bits you have to round down So I could fit 24 entries if I really wanted to Again kind of weird question, but This gets to the hard part. So you get a just a big old memory dump here. Everyone's favorite So it says the following frame is used to store the page table for processes 0 to 3 Use an outline to show the location of the page table for process Zero So this is like a weird thing where it gets divided into four. So process zero is going to be the first Quarter of this Yeah, so the first four rows so if we so So the whole thing here is going to be 512 bytes or 556 bytes And then we're using this weird thing where Page tables four of four processes are packed into a frame Yeah So this is a frame This is one frame and it's going to have four page tables. So you assume they go in order So this is the page table for process one page table for process two page table for process three or two page table for process three And you can go ahead and sandy check yourself because we said each of them is 64 bytes So there's 64 bytes or also 32 entries So there should be 32 entries here each entry is two bytes So luckily See how they wrote that out each one of those things are two bytes. So Along the top there are eight entries and then we have four rows eight times four is 32 Which is the number of entries we said before So process zero has 32 entries here and these are what they are So Now it says using the table above translate the virtual address is shown below for process zero to the corresponding physical address For each address show the corresponding page table entry and the physical address If the virtual address is valid invalid write fault If the pte is not valid write invalid under the physical address If the page isn't swap write swap x where x is a dislocation And you have to figure out, you know, we have to do it in binary. So Swap swap is the top bit of the first hex character so Luckily enough So let's just divide it so we know our page size is eight bits Which is going to be two hex characters. So we don't have to write this out in binary. Thank god So we can draw a line here so to the right of the line is the offset and to the Left of the line is the virtual page number So the virtual page number is just the entry. So you just count however many entries So they give you the first one. So it's the virtual page number at entry zero or one so This is entry zero. This is entry one So this would be your physical or sorry your page table entry and then To do the translation This bit the least significant bit is A one which means it's valid. So the least significant bit is The valid bit. So basically if it's an odd number, it's valid So we know it's valid. So we can go ahead. This is just which process it is luckily it Lines up with the process. So then we would just this whoops the 54 Is the physical? Frame number. So we would just take that into the physical address and then we keep the offset the same Yeah, sorry So there's four hex values because they're two bytes So this is this table is really weird because it only shows essentially eight entries at the top And then on the left are memory addresses and they are not related Well, they're kind of related because this would be if these were all memory addresses You'd have to multiply each of those by two because they're two bytes there So it's a bit weirder than it's kind of I guess meant to throw you off, but it's kind of an unclear table So there is 16 bytes across which These are all memory addresses on this side But at the top but along the top are just the number of entries which is unrelated So if we count the number of entries, this would start entry eight entry 16 entry 24 If we just counted the number of entries, which is the number of two bytes Yeah, so this entry for element one is actually at a location two Because it starts each entry is two bytes. So you'd have to multiply All right, so next one virtual address one five So you would think by looking at this, you know, oh, we take the one and then we take the five and it's this one well, it's not because you know, again memory addresses on the left and then Just random entry numbers on the top So easiest thing to do one five if we split this out. This is actually entry 21 if we write it out in decimal so This is entry 16 here. So 16 17 18 19 20 21 is this entry So this is entry 21 so the page table entry is ac 0 3 what Yeah, that's the index number. So Yeah, no, it is the virtual page number, which is essentially the index It's number odd. So it is a valid address. So we just go ahead and translate so We take the Physical frame number, which is ac and then we just add the offset from the virtual address So it would translate to address ac b4 All right next one Is a trick So it is virtual address two zero Which would mean it's entry 32 And there are only 32 entries and we start at zero because we like computers So it's not even a valid entry the last entry the last valid entry in the page table is going to be 31 This is asking for 32 So it is outside of our range. So it is invalid all right Next one is entry five so we can just count five Huh? Oh, sorry. I'm supposed to write fault. Yeah fault All right, next one is entry five. So zero one two five So it would be this one so db oh All right in this one The valid bit is not set But the swap bit is set because it's the most significant bit in the last one So eight is one zero zero zero So this means it's in swap And it says to just use the physical uh frame number as the swap location. So you just write swap db Now next one is a a is 10. So this is eight here nine This is entry 10 So it was What was it zero three zero e Oh now e In binary is one one one zero So it means the swap bit is set again. So we just write swap And then use the frame number which is zero three Yeah, no, no just means it's on disk It could be swapped out and there's just a still entry there or something like that Like the entry could be there, but now it's What page it goes to isn't actually valid anymore. So you'd have to flush it or something. Yeah So You're swapping things out from memory, but you could go off to like an ssd or something No, so this is where the page is So this page here is in the swap file somewhere at entry zero three Yeah, the the page is currently on disk So this means it's currently on disk. Yeah May or may not be Not yet the last question is about the tlb If the swap bit is zero, it could just be a valid entry and it could just already be in memory Just be in memory like yeah all right last one is One e which is entry what like 30. So it's the second last one So just to spare some counting it is this one So it is the page table entry is c607 So in 07 it is 0111 So which means it's valid and So we just do the translation. So it would be c6 f zero All right last one quickly Is like hey, here's the current contents of the tlb assume that you know the tlb doesn't miss or anything So let's divide them up So we know that this is the virtual page number This is the physical frame number And this nibble here This is the process id and these are all the permissions So we have to check everything. So first process one reads from virtual address Zero like virtual page number zero three. So we actually have an entry here in our tlb But if we look at the process id column, it's a zero and this is process one So it's actually not in there. So this is just a miss Because it's the wrong process For the next one We check 19 which would be This one So it's a correct It's the correct virtual page. It's the correct process that also matches up And then we check the permissions So in this permissions, it is six Which is even which means the valid bit We go back here the valid bit is zero. So it is a miss Because it was invalid And then quickly The next one is one d for process Zero, which is this last entry here So It maps up the permissions. It's valid. So it's actually a hit It doesn't even say to give the address But if we were to translate the address the address would just be ee uh four nine And then for the last one, which is the last one, which is the most annoying one Is going to be process zero rights to address one b So if we look up that would be This entry So the virtual page number lines up It's the right process id and then We have to look at the permissions So five is zero one zero one We look at this permission table That means that that old bit is one which By looking at this it means it's read only So this one says process zero writes to that address So it's not allowed to do that because that bit is zero. So miss Permission kind of annoying Yeah, yeah, it's just it's basically a cache for page table entries Yeah, it's just a cache So it'd be way better if it was for a multi level page table because then You know, it would save you going multiple levels But for this it's a single level. So it's just Faster the page table entry is already there instead of doing a separate memory access for it Yeah The first one is a miss because It would correspond the closest page is this one Where the virtual page number lines up But the process id for this one is a zero And it says process one So it doesn't line up. So it's not valid Okay, sweet Yeah, but you shouldn't have access to just random memory Well, but if I can like read your bank account or something Okay, what about read your bank account in 10 years? All right, well just remember pulling for you we're all in this


Hey guys, what is up? Welcome to my channel for today's video. Oh, I am so excited. I'm going to be reviewing and demoing the brand new Odin's Eye Nature Elf series, which is their new collection for summer 2020. They came out with one big eyeshadow palette, three little mini guys, and then a new highlighter palette. So if you want to hear my thoughts on the collection and see a demo of each of the products, then just keep watching. Fun fact, this video is two weeks in the making. So two weeks ago before I got married, I filmed tutorials for three of the palettes and then, you know, I got married and life went by and whatever whatnot. So here I am two weeks later, finally sitting down to finish up this review. So I've had some time with the staff. So I'm a little bit late. There's a lot of great tutorials and reviews already up, but I thought I would add. I have worked with Odin's Eye in the past. They have sponsored some videos. This one is not sponsored at all, though they did gift the items to me, which I am so very grateful for because their stuff is so cute. If you do plan on picking up anything from the brand, I do have a discount code. If you type in Morgan Turner at checkout, you will get 10% off. I do receive a small commission from that. So if you don't want to do that, then that's fine. But you save money that way. This collection is inspired by the elemental spirits in Norse mythology. So if you don't know, you know, it's an indie brand based in Sweden. I love it. They say that the design of this new series continues with the same pattern as the first Alva collection. Let's just dive into the palette so that you can see what we're working with. So we'll start off with the big guy over here, the one that I think we were all really excited about. This is the Alva 2. So they do have an Alva 1, but the Alva 2, you guys, this was such a fun addition because it is so bright. They don't have anything like this in their line. I was dying to get my hands on it because it's just so fun. So this guy is $31. At $21, they have their Alva mini palettes. So we have the Alva mini ocean palette, which looks like that. We have some blue tones and then some warm brown tones over here. Then we have the mini forest palette, which I love this one. This one is like a true fairy palette to me. You have greens, blues, really fun pink tones as well. I love it. We have the mini sky palette. This is the one that I'm currently wearing on my eyes today. And these are more purple tones.  They also have a new highlighter palette. This guy is $33. And here are the shades here. So the layout of today's video, we're going to start off with the big guy that most of you are going to be excited about, the Alva 2 palette. And I will do a demo on that. And then we will get into the three minis. And then of course this guy. And then I will finish off with the tutorials of these because I filmed them a little bit differently. Anyways, you'll find out. Let's go. Alva 2 palette. Like I said, this is $31 for USA. From line, they say it's the second generation eyeshadow palette in the Alva series. The color scheme covers warm and cool colors. The varied rainbow color scheme is able to cater to versatile looks. So what they seem to really be marketing is that this has an even mixture of warm and cool tones. So these two rows over here of course are going to be super cool toned. And then these here are warmer toned guys. And I think this is a very well thought out rainbow palette. So you're getting four different textures here. And that I think is what Odin's eye does best, is their textures and the dimensions that you get from their formulas. You have seven mats, five diamond glitter eyeshadows, two large sequin eyeshadows and two metallic. So they do have a pressed glitter formula in here. So if that turns you off, they are these guys right here. I'm not a huge glitter eyeshadow person. I'll do it occasionally just for a little extra glit and glam, but I don't want to make it an everyday habit because it is technically not I say. All right, so quickly I'm just gonna tell you what I think about this palette. Then I'll get into the demo. That one kind of explains everything that you need to know. For the most parts, I think this palette is really great. I love how unique it is compared to the rest of their line. With these more pastel shades, especially you're going to want to pat as opposed to sweep to really build up that color. I think they do have a really nice base of a formula. So everything's blendable. Everything's quite pigmented. I would say this palette in particular is lacking some depth. I know you have these shades right here, but I needed some more depth, especially with the blues. You only have this one and because this is a shimmer shade, it is a little bit more difficult to work with. The shimmer shades are going to benefit from applying with a finger. They do have a bit of a sticky texture to them. So with a brush, it just doesn't quite catch onto the brush hairs as nice as a finger would catch it. Glitter glue also, you're going to get the most out of the shadows. They do work dry. Every look that I did today was using a dry brush or my fingers, but of course these are going to stand out when you add the extra goodness to it. But for $31, I think it's a very fair price and it's a really neat rainbow palette. And it's easy to create looks if you just work down this way or if you want to do something different and challenge yourself. Because it's designed by depth, you can also create a look based on depth, which I think is really neat. So overall, I really like this palette. So let's get you guys into the tutorial for this palette. So I'm quickly applying my eyeshadow base. I'm just using my Mac painterly paint pod, which is a little dry. I need to buy a fresh one. I couldn't help myself for this look. So we had to play in the blue and green sides. I feel like blues and green really tell the story of the quality in a palette. With the Kaleidos S1 brush, we are taking Aqua Marine. For being a pastel color, this shade is very impressive. I get a lot of immediate pigmentation. My suggestion though for pastels, don't just sweep it on your eyelid. First, press it in, especially on the base. Utilize the base and then you can kind of sweep it out, but you're going to want as much pigmentation as possible. That's how you do it. Next, we're going into blue P-Fowl. I'm using a Luxie 229 and it's going to go into this color. These colors kind of blend out to be very, very similar. I'm not going to lie. I much prefer the Aqua Marine. I feel like it holds its color better. Like this one, as you can see, it's a powder blue, but it's not quite as pigmented as you see in the pan. So again, you're going to want to pass that in. Finally, for a little bit of fun, we're going in with green tea. I'm using a refer 14 brush and again, this is still a pastel shade, so you're still going to want to pat to apply. Now, this shade throughout this whole look, you are definitely going to have to reapply and rebuild it up. It is not more sheer, but it can kind of blend away as you mix it with other products. So just be prepared to go back into this shade. So I'm putting it on the outer part and then all along the lower lash line and blend it pretty low. This really is such a cool look, you guys. Honestly, kind of like this, if you use these matte shades all over the lid as well, this would be a really cool pastel look, but I had to play with the shimmers. So we're going in with a blue bubble. So this one, I would say is more so of a satin shade. It's a little bit lackluster on the eyelid than what I think I'm used to from Odin's Eye, but there is a place for it for sure. Like this would be a gray inner corner highlight, but I do wish there was kind of a more glittery blue just for the eye look that I want to create, not necessarily because I'm disappointed. I would suggest also doing this look maybe in cut crease form. I just love the blown out simple looks. I can't help it. Even though I do cut creases sometimes, there's something about a blown out look that I love. Next, I'm going to take Forest Dream. So the consistency of these shimmers definitely need to be used with a finger. They have like almost a bit of a sticky or tacky feeling to them where you just know the finger is going to work best because if you use a brush, it's just not going to pick up on the brush right and it's not going to apply to this skin as well. So you're going to get the most out of using a finger with these. So finally, this is going to be the hardest part of the look. I'm taking a BK Beauty 207. You want a dense brush. We're going into deep sea. So this step could give you fall out. Just the nature of shimmery navies are kind of hard to work with. I'm using the shade to add depth to the look. And again, like I just said, the shimmer is going to apply better with a finger. But because of the precision that we need, you need a really dense brush to make sure you're picking up product and are able to work it out onto the skin because it's going to be a little bit more difficult to blend for shimmery navies. It worked best on top of deeper matte shadows to blend them out using them as an actual contour shade for precision. It gets a bit difficult. I'm not going to lie about that. So I'm just patting it in, trying to get as little fall out as possible and as much as the product onto the lid as I can and kind of mapping out this shape. See? So a little bit on the lower part of the outer lash line and a little bit over the crease for some depth. The brush I'm going to take is the brush that I used for green tea. I put a little bit of green tea on my brush. We're going to work on blending this out so it looks pretty seamless. I do want to apply a little bit more of forest dream to blend it in together. This side needs more forest green too. Ah, isn't that so pretty? It's really coming together. I'm taking the shimmery green, green elves. This is going to be the inner corner color and this would be gorgeous all over the lid for this look but I'm just going to use it or just a little element of green. Final step is going to be going back into forest dream. I'm using another dense brush. This is the refer number 12 and I'm just going to put this along the lower lash line and this is really going to make the eyes pop and bring the blue together and then finally take a little bit more of green tea and blend it out underneath so that the green is popping through and want the green to stay consistent and vibrant in this whole look and that's it for shadow except this liner and lashes. So I hope you guys enjoyed what I had to say about the Alva 2. Let's move on to the little mini Alva 2 pallets. So they came out with three. Now each of these are kind of designed the same in that you have the four single shades right here and then you'll have a big circular one that is a split pan. Now the split pan actually has a very special kind of glitter celestial formula not true glitter but really sparkly and pretty it's not a pressed glitter. I think these are super cute. One thing that I noticed with the mini sky which is the more purple one the center shades were a little bit more chunky so you needed to use a finger otherwise it would fall all over my face and all of these I think are very shimmery. You do have one to two mattes in each of the pallets. Before these pallets the look you're going to get is just really shimmery not a lot of depth. So the mini ocean palette I really liked I was very impressed by it. I don't really love the cool and warm tone mixtures that they have going on here. I just think these two are just too warm to compliment the other shadows. I wish they would have just gone all crazy blue for this palette in my personal opinion but I do really like the shades in here. The second tutorial will be the mini forest palette. I think as far as Odin's Eye and kind of their brand this is my favorite to go with their brand. This is a true fairy palette. I think this one might be my favorite of the three minis because it's just so cute. I will say the colors pulled a lot more green on my eyelid especially this blue right here. I was expecting something more turquoise I ended up getting something more green which the palette is all green packaging wise so I'm completely fine with that. I just think this one is the softest and most fairy light color and then the mini sky. Now you guys know I love this one I'm biased because purple is my absolute favorite eyeshadow color and of the looks I created this is the favorite look that I created and I really like how you have a gold in here you can kind of warm up the purples it's very complementary to these colors. The only thing I didn't like was I felt like in here in particular the middle shade wasn't that great it was a little bit chunky but I mean you guys this look is so pretty so even though maybe it's not my favorite it's probably the one I would grab for the most but overall these are really solid and if you're looking for that dimension that I think Odin's Eye has that's very special as far as like the glitters and the shininess and the metallicness these are a really fun way to go especially if you enjoy the formula so I did a look with each of these palettes I'm just gonna throw on some music and you can watch the tutorials if you would like if not you can fast forward through them. All right so it's time to finish up with the albatool highlights palette this is their second palette I liked their first one I don't think they have the best highlight formula in the world but they do have very unique colors that I do enjoy so this one you get a variety of different finishes and textures here and I think this palette really does complement the collection as a whole so if you purchase the items from the collection these colors are going to go well with them so these aren't colors that I would probably use everyday the only color that I can see myself using more so on an everyday basis is gnome right here it's a little bit more champagne yellow which this is such a good highlight you guys it is so smooth and shiny I really like it these two highlights up here not as crazy as a fan of I think the blue is a little bit too chunky for me it's different than these bottom two formula eyes and this one is like a glitter formula so if you don't like glitter as a highlight you're not going to like this see all that reflection that's that shade this color would be gorgeous all over the lid I definitely think it's a color that can be utilized and it can go with any base shade honestly it's really stunning but for me as a highlighter I wouldn't use it I do like this shade right here a lot it's a little bit more pinky purpley it's the main highlight that I have on this glow is actually this shade right here but I really like this shade because it compliments pink and purple looks without being really obnoxious and blinding so it's up to you whether or not you think you need another highlight palette I don't think it's bad and I like the variety that you're getting in here but for me where Odin's eyes kills it is in the eyeshadow palette and I think that these are so fun all right so final roundup thoughts I mean I think if you're going to get anything from the collection it's cut to be the alva two palette I think this one is just so fun it's so unique and if you really want to play and get different looks this is a great way to go however there's nothing wrong with these little mini palettes if there's a color story that really speaks to you go for it like I said if you really want that Odin's eye ethereal kind of vibe I would go with the mini forest palette I think it is stunning everything about this brand is so well thought out it's so detailed the packaging I mean is incredible I'm so happy that this brand exists and I'm more than happy to give them shoutouts because we always complain that brands are not coming out with anything new and innovative or anything like just the whole theme of this I didn't know I needed it but I needed it so that is all I have for today's video I hope you guys enjoyed it if you want to subscribe to my channel already I would absolutely love it if you would consider taking the time to do and I will see you guys in the next one bye


Okay, so let's do this problem now. So now that we figured out how many Dalton's, or AMUs, one molecule of carbon disulfide ways, here let's erase all of this other stuff, it wants us now to figure out, well, how many grams does one molecule of carbon disulfide weigh? So gram is really big relative to one molecule, remember molecules are very, very tiny. So of course there's going to be a conversion factor when we talk about it, so one Dalton or one AMU mass unit equals 1.661 times 10 to the negative 24th. Remember your conversion, how to do conversion factors from unit one, how to do conversions from unit one, and you can just take this number here and convert it to grams. So we've got the mass here in Dalton's, we just need the mass in grams, so that's going to equal, well, 76.143 conversion factor, I'm going to slide it down here, there, I'll just do that, try to keep it even. So one Dalton equals 1.661 plus answer by 1.661 e to the negative 24, and remember, if you get the numbers E, then you should get a very small number, as you could imagine, this number times this number is going to be a very small number, should be somewhere around 10 to the negative 22, because this is in the 10s region, so two decimal places. So let's see if it is, yeah, it is. So in fact the number is 1.26012, the same grams, I think that's your first conversion factor.


Hey everyone, welcome back to my kitchen and welcome back to another meal prep. It's been a while since I've posted, but after the holidays and doing a little bit of vacation time, I'm back to meal prepping and just making sure that I've got healthy recipes that I have ready in my refrigerator to heat up and go or things that I can put in my freezer whenever I do freezer meal preps. I just love having things prepped and the last couple of weeks have been rough because I have not been meal prepping. So today I'm going to be doing a few breakfast items along with some lunch items and you're going to also see what I make for dinner this day as well. So I'm going to be working on a couple different projects at the same time here in the beginning of the video. So I'm cutting up an onion because I'm making a Southwest pork bowl and this turned out so delicious. I'm definitely putting this on my recipe list for recipes I want to make again, really, really good. So I got the pork being fried up for that and while I was frying the pork up, I decided to mix up some baked oatmeal and in the background, you're going to see my daughter and my husband here and there because they were working on cooking some food as well. My husband cooks a lot, probably almost as much as I do. He is the guy that does a lot of the meat and grilling in our house and so we share the cooking a lot. So I had shown you all how to do this, I think a month or two ago and that is using canned, home canned fruit to make oatmeal and I will leave the recipe link below for this but in the recipe, there is a cup of milk. In place of that cup of milk, I'm using the juice from the canned fruit and then in place of the fresh fruit, I'm using some of the fruit from the canned fruit and obviously you could use store-bought canned fruit as well if that's something that you have in your pantry and maybe you're trying to use up. This is a great recipe option for that to use that up. So I'm making a peach version and the last time I did this, I did blueberry and strawberry and yes, I canned blueberries and strawberries. We love them. I've talked about this before, how much we use them in our house for all kinds of things and this is one of the things that I use them for but the girls requested that I make a peach version. So this day I did a peach version and I did a strawberry version and one little tip I'll give you to do this if you're going to make these tweaks and use canned fruit is to use a whisk attachment on your mixer to kind of help to mash up that fruit and get it spread throughout the oatmeal as much as possible. And as always, I'm here to give you guys the best budget tips when it comes to cooking. So as you saw, I was getting my oatmeal out of my big bucket. That's because I buy oatmeal in 50 pound bags and I store them in five gallon buckets and then in my kitchen, I store them in two gallon buckets. It's just the best way to get oatmeal at a really good price and then I'll always have it on hand and we can use it as a great whole grain. So this recipe does make an eight by eight pan and here I'm showing you what the canned strawberries look like. A lot of people when they find out I canned blueberries and strawberries, their first reaction is what is the texture? And I would say it's pretty much the same texture as if you were to take frozen strawberries or frozen blueberries and saw them out except for there is a bit of a freezer type taste to frozen berries that you don't get with canned berries. And so for the fact that I don't have to sell them out to make a recipe and the flavor in my opinion is a bit better, that's why I choose to can them and they don't have to take up freezer space. I know I get a lot of questions on why I can so many things and that's one of them is that I have three medium size deep freezers and I still struggle to find space for everything. So canning things and being able to keep it on the shelf is really, really helpful. So here I am just taking that pound of pork out of the frying pan and I'm going to leave the drippings in there to fry the onion and then you'll see me pressing some garlic as well. I've gotten questions when I use this garlic press if I like it and yes, I really like it. I'm not exactly sure what the true term of this garlic press is but I would consider it to be a rocking garlic press. It's just something that you take and you press down on a hard surface like a cutting board and you just rock it back and forth and it presses the garlic through and the reason I switched to this is because I got really tired of cleaning my other garlic press out and this one's a bit easier to clean. So if you're looking for a garlic press I can't recommend this one enough and I will try to link it below along with other things from this video. All right, so once the onions and garlic were fried up I went ahead and dumped a bag of rice cauliflower into this. I love using rice cauliflower. It's just another way to get more veggies into our diet. So I added that in, I put in a few other ingredients including some canned diced tomatoes and some canned green chilies. This is just such a yummy recipe. If you're someone that really likes ground pork then you will really like this one. Once you have all of the ingredients in here you just wanna stir this up and mix it together. And as usual I like to do things like this for lunches or sometimes for dinner depending on what else I'm making. We will use these for dinner as well and I just like these little single serve containers just to portion everything out to know how much I have and they're just easy to grab out of the refrigerator. And then to go along with these Southwest bowls I chopped up some cilantro to mix on top. Fresh herbs on top of things like this are so delicious. And then I also went ahead and cut up some lime and I don't know why it may be because I made this with pork but for some reason the fresh squeezed lime over this is just absolutely wonderful. So it's the flavor profile of this whole recipe was just delicious. And I actually had this for lunch this day while I was cooking and I wanted to show you how I will be eating it or anyone else in our house will be eating it and that is with some avocado and then squeezing some lime over it and then I did also put some pink Himalayan salt over top of the avocado and it was so yummy and so filling. And then here is the end result of the baked oatmeal and I just took a knife and cut them into pieces. We will probably eat these throughout this week if in five days or so I have some leftover I may throw it in the freezer but for now I will just be storing these in the refrigerator. They'll just be easier to scoop out portion sizes. So the next thing I'm making is a breakfast item. I love that natural choice. It has lower chemicals and just a little bit of a cleaner option when it comes to deli ham. So this recipe is so easy to make. It's only a few ingredients like you're seeing here. I grabbed some of my home can salsa but you can use regular salsa and these are actually eggs from our chickens that we share with my parents and my brothers and their wives. They are laying like I think around 20 eggs a day right now so I need to come up with some good recipes and use them like this one. So all you need to do is mix some of the salsa in with the eggs. I added a little bit of salt and pepper and you're gonna whisk that together. Then you're going to get out a muffin tin and or you can use some silicone muffin liners like you're going to see me do here in a bit. They're a little easier to pop out of those than a traditional muffin tin so that's why I opt to use those. So all you need to do is take a slice of that ham, put it in the bottom of the muffin tin or the muffin liner like I'm doing here and then you're gonna scoop about a fourth cup of the egg mixture into the ham part and then I like to top mine with a little bit of chopped up green onion like you're going to see here in a moment. Now, you can definitely add in sour cream to the egg mixture to make it a bit fluffier. You could add cheddar cheese to the top of these. I personally try not to eat too much dairy just for some health reasons and so I opted to just do these with the cut up onion on top and I used some scissors to cut that up. That's a really easy way to cut up green onions and they are absolutely delicious and I don't even miss the cheese but if you're someone that loves cheese this would be a great option to add cheese to. All right, so if you guys watch my videos often you already know what I'm about to do but I love this thing. In fact, I just bought one for my sister-in-law because I use it so much but this is a zucchini noodle maker actually really a veggie noodle maker. You can make veggie noodles with carrots. There's a few other options you can use this thing for and it's got a lot of different sizes of noodles that you can make. So we are gonna be making a peanut tie bowl I think is what it's called, something like that. So I love protein bowls and noodle bowls and all of those types of things. I just love having a combination of different ingredients that are right in front of me where I can see them all in the bowl and then I get to choose and pick how I eat them and what combinations. So I'm going to be making the zucchini noodles for the bottom of the bowl and I don't normally do this but I was reminded this week about doing this and this is an option to make your zucchini noodles not so soft and mushy. So basically you wanna lay them out on a paper towel and you just wanna put salt on them and allow the salt to sit for about 15 minutes and then you're able to actually squeeze a lot more water out of the noodles before you cook them. So that just helps them to stay a little bit more firm and not quite as mushy. So while the chicken was cooking, I went ahead and made up the peanut sauce and I love peanut sauce and one thing I'm gonna remember to add the next time I make this is some red pepper flakes. I felt like it could have used a bit more spice, a little more kick but other than that, it was a fantastic recipe. Here I am using liquid aminos instead of soy sauce. It's just a healthier option, has a lot of good benefits for you and I like being able to sneak in some superfoods like that. So this is really simple, just has some lime and a few other ingredients and you can just mix it up and I actually only ended up using half of this recipe and I put the other half in the refrigerator thinking maybe next week I would find another use for that or somewhere along this week finding some reason to find something to dip into the sauce since it was so delicious. And here I am using my curly whisk to whisk this up. It's one of my favorite kitchen tools. I will try to leave it linked below. It's amazing to me sometimes what that thing can whisk up and how much it can really take on even though it's so small. So here after I let the zucchini noodles sit for a while with that salt on them, I just put them into the paper towel and really squeezed them out. I actually did that twice just to try to get as much of the moisture out of them as I could. And then I just wiped out the pan that I fried the chicken in and put a little bit of avocado oil in it and dumped the noodles in and I just barely saltate these. I really just wanted them to cook just a very slight bit and then they would still kind of hold together good in the bottom of my peanut bowls. So here before I start assembling my Thai peanut bowls, I decided to put my little egg cups away and I just put them in some Ziploc bags that I could easily tuck away in my refrigerator and pull out through the week to heat up. So I ran out of my little prep containers. So I decided to pull these glass containers out. I actually ordered more of these prep containers this week just simply because we've been using them so much. So I just divided out the zucchini noodles and then I grabbed the chicken and the chicken. I don't know if I mentioned this but I really just seasoned it with salt and pepper and then fried it in avocado oil. I didn't do anything extra to it since it was going to get that peanut sauce over the top of it. I just thought it would take away from the flavor if I did a lot of seasonings. So I just cut it into strips and stuck it on top of the zucchini noodles. Next, I grabbed some purple cabbage. I love cabbage. It's so delicious. I just cut it up into kind of like a shredded size and put some into each bowl. I knew this would be a nice crunch and just the refreshing little bit of flavor in with the other ingredients in these bowls. Next, I cut up a red bell pepper again to just bring another fresh flavor into this protein bowl and to give it a little bit of a sweet kick as well. All right, so here goes the peanut sauce. This is so yummy. I am so excited to eat this this week. I actually didn't even eat one of these yet since I filmed this today because we ate something else for dinner but I was tempted to kick my dinner plans to the side and eat one of these because they look so good with all of the different flavors. So on top of the peanut sauce, I just put some sesame seeds and then I sprinkled some green onion over it. All right, so now you're going to see what I whipped up for dinner and if you need a really fast dinner idea, this one is fantastic. So you're just going to take some Brussels sprouts and I cut them in half and we're going to be making some bacon maple or maple bacon Brussels sprouts and this is so, so easy. So I had about two pounds of Brussels sprouts and I cut the tough ends off and just clean them up a bit and put them into a bowl and then I'm going to take an entire pack of bacon and cut it into some pretty bite-sized little pieces. It's easiest to take the entire thing and cut it all at once. So you're going to put that in with the bowl with the Brussels sprouts and then on top of that, you're going to be putting some maple syrup and some oil of your choice. I prefer avocado oil, so I drizzled that in over it and then you're going to mix it up really well and my bowl was almost too small for this but it worked out well. I also used a maple syrup that is a sugar-free maple syrup just because I am conscious of my sugar intake for health reasons. So I just decided to go ahead and try it with this and it worked out so well. My entire family raved about this and it was delicious. So to go along with this and to go along with something that is really fast and easy to make, I had already had some wings, chicken wings thawing out. I got them out in the morning and I had them thawing on the countertop and I put them into the air fryer and everything pretty much got done around the same time. This takes about 20 minutes to make. It's so, so easy and I just am going to keep this in mind for days whenever I know we're going to have a really busy day and I need to get dinner on the table and throw it together quickly. So here, whenever I was done mixing up the bacon with the Brussels sprouts, that's whenever I added some salt and pepper and threw it into the oven and I baked it at 400 for about 20 minutes. You could probably do it even 30 minutes. Just check it as you go. I did stir it every 10 minutes just to get everything cooked evenly. And then for my wings, I just threw them in a big bowl. I put some avocado oil over them, salt and pepper and I put them into my air fryer and basically we just dumped some of our favorite wing sauces on them individually. Whoever likes whatever sauce and ate that with the Brussels sprouts. So I hope this video inspired you guys. Please leave a comment below. That always helps me out. Give this video a like, subscribe if you're new and I'll see you all in my next video.