From 01a6c054d548d9fff8bbdfac4d3f3de4ae8677a1 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Wed, 7 Sep 2011 11:49:14 -0400 Subject: Remove web directory; all cruft or moved to 6.828 repo --- web/l4.html | 518 ------------------------------------------------------------ 1 file changed, 518 deletions(-) delete mode 100644 web/l4.html (limited to 'web/l4.html') diff --git a/web/l4.html b/web/l4.html deleted file mode 100644 index 342af32..0000000 --- a/web/l4.html +++ /dev/null @@ -1,518 +0,0 @@ -L4 - - - - - -

Address translation and sharing using segments

- -

This lecture is about virtual memory, focusing on address -spaces. It is the first lecture out of series of lectures that uses -xv6 as a case study. - -

Address spaces

- - - -

Two main approaches to implementing address spaces: using segments - and using page tables. Often when one uses segments, one also uses - page tables. But not the other way around; i.e., paging without - segmentation is common. - -

Example support for address spaces: x86

- -

For an operating system to provide address spaces and address -translation typically requires support from hardware. The translation -and checking of permissions typically must happen on each address used -by a program, and it would be too slow to check that in software (if -even possible). The division of labor is operating system manages -address spaces, and hardware translates addresses and checks -permissions. - -

PC block diagram without virtual memory support: -

- -

The x86 starts out in real mode and translation is as follows: -

- -

The operating system can switch the x86 to protected mode, which -allows the operating system to create address spaces. Translation in -protected mode is as follows: -

- -

Next lecture covers paging; now we focus on segmentation. - -

Protected-mode segmentation works as follows: -

- -

Case study (xv6)

- -

xv6 is a reimplementation of Unix 6th edition. -

- -

Newer Unixs have inherited many of the conceptual ideas even though -they added paging, networking, graphics, improve performance, etc. - -

You will need to read most of the source code multiple times. Your -goal is to explain every line to yourself. - -

Overview of address spaces in xv6

- -

In today's lecture we see how xv6 creates the kernel address - spaces, first user address spaces, and switches to it. To understand - how this happens, we need to understand in detail the state on the - stack too---this may be surprising, but a thread of control and - address space are tightly bundled in xv6, in a concept - called process. The kernel address space is the only address - space with multiple threads of control. We will study context - switching and process management in detail next weeks; creation of - the first user process (init) will get you a first flavor. - -

xv6 uses only the segmentation hardware on xv6, but in a limited - way. (In JOS you will use page-table hardware too, which we cover in - next lecture.) The adddress space layouts are as follows: -

- -

xv6 makes minimal use of the segmentation hardware available on the -x86. What other plans could you envision? - -

In xv6, each each program has a user and a kernel stack; when the -user program switches to the kernel, it switches to its kernel stack. -Its kernel stack is stored in process's proc structure. (This is -arranged through the descriptors in the IDT, which is covered later.) - -

xv6 assumes that there is a lot of physical memory. It assumes that - segments can be stored contiguously in physical memory and has - therefore no need for page tables. - -

xv6 kernel address space

- -

Let's see how xv6 creates the kernel address space by tracing xv6 - from when it boots, focussing on address space management: -

- -

xv6 user address spaces

- - - -

Managing physical memory

- -

To create an address space we must allocate physical memory, which - will be freed when an address space is deleted (e.g., when a user - program terminates). xv6 implements a first-fit memory allocater - (see kalloc.c). - -

It maintains a list of ranges of free memory. The allocator finds - the first range that is larger than the amount of requested memory. - It splits that range in two: one range of the size requested and one - of the remainder. It returns the first range. When memory is - freed, kfree will merge ranges that are adjacent in memory. - -

Under what scenarios is a first-fit memory allocator undesirable? - -

Growing an address space

- -

How can a user process grow its address space? growproc. -

-

We could do a lot better if segments didn't have to contiguous in - physical memory. How could we arrange that? Using page tables, which - is our next topic. This is one place where page tables would be - useful, but there are others too (e.g., in fork). - - - -- cgit v1.2.3