lec02 - Webcourse
Download
Report
Transcript lec02 - Webcourse
Operating Systems Engineering
Processes & Address Spaces
By Dan Tsafrir
1
OSE 2011– processes & address spaces (lec2)
Reminder: goal of “processes”
2
Give each process a private memory area
For code, data, stack
Illusion of its own dedicated machine
Prevent each process from reading/writing outside its
address space
But allow sharing when needed
Bring a program to life
OSE 2011– processes & address spaces (lec2)
HW & OS collaboration
3
OS manages processes
(De)allocate their physical memory (create, grow, remove)
Switch between them (multiplex HW)
Keep track of them when they’re not executing
Configure HW
HW performs address translation & protection
Translate user addresses to physical addresses
Detect & prevent accesses outside address space
Allow cross-space transfers (system calls, interrupts, …)
Also
OS needs its own address space
OS should be able to easily read/write user memory
OSE 2011– processes & address spaces (lec2)
HW & OS collaboration
4
HW support not necessarily corresponds well to what the
OS wants (Linux/PPC vs. AIX/PPC)
Two main approaches
Segments & page tables
Paging has won
Most OSes are designed for paging
Most modern CPU designs support only paging
BUT
x86 provides many features only via segmentation HW
(interrupts, protection)
So we must learn about x86 segments, a little bit
Until recently xv6 used segments (rev 5 changed that)
OSE 2011– processes & address spaces (lec2)
Case study: Unix v6
5
Early Unix OS for DEC PDP11
By Thompson & Ritchie, 1975
From Bell labs; the 1st version to be widely used outside
Bell
Ancestor of all Unix flavors (Linux, *BSD, Solaris,…)
(But much smaller)
Written in C
Recognizable (shell, multiuser, files, directories, …)
Today’s Unix flavors have inherited many of the conceptual
ideas, even though they added lots of stuff (e.g., graphics)
and improved performance
OSE 2011– processes & address spaces (lec2)
Case study: Unix v6
6
1976 Commentary by Lions:
a classic….
Despite its age still considered
an excellent commentary on
simple but high quality code
For many years, was the only
Unix kernel documentation
publicly available
v6 allowed classroom use of
source code; v7 & onwards
didn’t
Commonly held to be one of the most copied books in
computer science.
Reprinted in 1996; still sold
OSE 2011– processes & address spaces (lec2)
Case study: Unix v6
7
We could have used it for OSE
But
PDP11
Old K&R C style
Missing some key issues in
modern OSes (such as
paging)
Luckily…
OSE 2011– processes & address spaces (lec2)
Case study: xv6
8
xv6 is an MIT reimplementation of Unix v6
Runs on x86 (well if you insist; we’ll use QEMU)
Even smaller than v6
Preserves basic structure (processes, files, pipes, etc.)
Runs on multicores
Just this year (2011) got paging
To “get it”, you’ll need to read every line in the source code
a few times; but it’s really is not that hard
Student’s goal: to explain to yourself every line; the (still
rough) commentary on the webpage will greatly help
OSE 2011– processes & address spaces (lec2)
Case study: xv6
9
First half of course, each lecture we will take one part of xv6
and study its source code (homework assignments will help
you prepare for these lectures)
About half-way the term, you’ll understand the source code
for one well-designed OS for an Intel-based
2nd half covers important OS concepts invented after Unix v6
We will study the more modern concepts by reading
research papers & discussing them in lecture
You may also implement some of these newer concepts in
your OS (JOS)
OSE 2011– processes & address spaces (lec2)
xv6 – why?
10
You may wonder why we’re studying an aging OS instead of,
say, Linux, or Windows, or FreeBSD, or Solaris, …
xv6 is big enough to illustrate the basic OS design &
implementation
Yet xv6 is far smaller => much easier to understand
Structure similar to many modern OSes
Once you've explored xv6 you’ll find your way inside
kernels such as Linux
This is, after all, OSE…
JOS occupies a very different point in the design &
implementation space from xv6
Finally, “getting” xv6 will help you build your own (J)OS
OSE 2011– processes & address spaces (lec2)
xv6 address space
11
xv6 enforces memory address space isolation
No process can write on another’s space or the kernel’s
xv6 process’s memory starts at 0 & (appears) contiguous
C, as well as the linker, expect contiguity
x86 defines three kinds of memory addresses
Virtual (used by program), which is transformed to
Linear (accounting for segments), which is transformed to
Physical (actual DRAM address)
xv6 nearly doesn’t use segments
All their bases set to 0 (and their limits to the max)
virtual address = linear address
Henceforth we’ll use only the term “virtual”
OSE 2011– processes & address spaces (lec2)
Paging in a nutshell
Virtual address (we assume 32bit space & 4KB pages):
pdx (10bit)
ptx (10bit)
Given a process to run, set cr3 = pgdir (“page directory”)
Accessing pgdir[pdx], we find this PDE (page directory entry)
physical address (20bit)
12
flags (12bit)
Flags (bits): PTE_P (present), PTE_W (write) , PTE_U (user)
20bits are enough, as we count pages of the size 2^12 (=4KB)
The “page table” pgtab = pgdir[pdx] & 0x ffff f000
An actual physical address
Accessing pgtab[ptx], we find this PTE (page table entry)
physical address (20bit)
page offset (12bit)
flags (12bit)
Target physical address =
(pgdir[pdx] & 0x ffff f000) | (virt_adrs & 0x 0000 0fff)
OSE 2011– processes & address spaces (lec2)
xv6 virtual memory
13
Each process has its own unique pgdir (= address space)
When the process is about to run, the cr3 register is
assigned with the corresponding pgdir
Every process has at most 640 KB memory
Not more that 160 pages
For each process, for VA higher than 640 KB, xv6 maps the
VA to an identical PA
=> Every process’s address space simultaneously
contains translations for both all of the process’s mem
& all of the kernel’s mem
PTEs corresponding to addresses higher than 640KB have
the PTE_U bit off, so processes can’t access them
The benefit: the kernel can use each process’s address
space to access all of its memory
OSE 2011– processes & address spaces (lec2)
xv6 virtual memory
14
Assume a process P size if 12KB (3 pages), and that it wants to
sbrk another page (sbrk is the syscall that dynamically
allocates memory)
Assume the free page xv6 decides to give P is in PA:
0x 2010 0000
Thus, to ensure contiguity, the 4th PTE of P, which covers VAs:
0x 0000 3000 – 0x 0000 3fff,
Should be mapped to physical page
0x20100 (= the upper 20 bits of PA 0x 2010 0000)
Two different PTEs now refer to PA = 0x 2010 0000
PTE of VA 0x 2010 0000 (kernel), and
PTE of VA 0x 0000 3000 (process)
The kernel can use both
OSE 2011– processes & address spaces (lec2)
Code: memory allocator
15
OSE 2011– processes & address spaces (lec2)