Memory Management

advertisement
Chapter 7
Memory Management
Today

Exam I





Thursday thru Tuesday
79 Questions (50 match, 29 guess)
1 Sheet Handwritten Notes
Project 3 – Jurassic Park
Chapter 7 – Memory Management
BYU CS 345
Memory Management
2
Project 3 Assignment
Step 1: Delta Clock

Implement delta clock.


Design data structure to hold delta times/events. dc[4] 10 / sem1
Program an insert delta clock function
dc[3] 5 / sem2



insertDeltaClock(int time, Semaphore* sem);
High priority, mutex protected
Add 1/10 second function to decrement top
event and semSignal semaphore when 0



dc[5]
dc[2]
0 / sem3
dc[1]
2 / sem4
dc[0]
4
pollinterrupts or
High priority, mutex protected.
Thoroughly test the operation of your delta clock before proceeding.



os345p3.c
Print Delta Clock (dc): int P3_dc(int argc, char* argv[]);
Test Delta Clock (tdc): int P3_tdc(int argc, char* argv[]);


BYU CS 345
int dcMonitorTask(int argc, char* argv[]);
int timeTask(int argc, char* argv[]);
Memory Management
3
// ***********************************************************************
// test delta clock
int P3_tdc(int argc, char* argv[])
{
createTask( "DC Test“, dcMonitorTask, 10, argc, argv);
timeTaskID = createTask( "Time", timeTask, 10, argc, argv);
return 0;
} // end P3_tdc
extern Semaphore* tics1sec;
// *************************************************************************
// display time every tics1sec
int timeTask(int argc, char* argv[])
{
char svtime[64];
// ascii current time
while (1)
{
SEM_WAIT(tics1sec)
printf("\nTime = %s", myTime(svtime));
}
return 0;
} // end timeTask
BYU CS 345
// ***********************************************************************
// monitor the delta clock task
int dcMonitorTask(int argc, char* argv[])
{
int i, flg;
char buf[32];
int ttime[10] = { 90, 300, 50, 170, 340, 300, 50, 300, 40, 110 };
for (i=0; i<10; i++)
{
sprintf(buf, "event[%d]", i);
event[i] = createSemaphore(buf, BINARY, 0);
insertDeltaClock(ttime[i], event[i]);
}
printDeltaClock();
while (numDeltaClock > 0)
{
SEM_WAIT(dcChange)
flg = 0;
for (i=0; i<10; i++)
{
if (event[i]->state ==1)
{
printf("\n event[%d] signaled", i);
event[i]->state = 0;
flg = 1;
}
}
if (flg) printDeltaClock();
}
printf("\nNo more events in Delta Clock");
// kill dcMonitorTask
tcb[timeTaskID].state = S_EXIT;
return 0;
} // end dcMonitorTask
Memory Management
4
Project 3 Assignment
Step 2: Car Tasks

Implement simple car task.

Design car functionality and Jurassic Park interface.
worry about passengers or drivers yet.)
(Don’t
Semaphore* fillSeat[NUM_CARS];
Semaphore* seatFilled[NUM_CARS];
Semaphore* rideOver[NUM_CARS];
Action
For each car seat:
(3 times, then car takes
off)
Wait until ride over
Release driver
Release passengers
BYU CS 345
Car Task
Park Task
SEM_WAIT(fillSeat[carID]);
Get passenger
Save passenger rideDone[] semaphore
Get driver (if last passenger)
Save driver driverDone semaphore
SEM_SIGNAL(seatFilled[carID]);
SEM_WAIT(rideOver[carID]);
SEM_SIGNAL(driverDone);
SEM_SIGNAL(rideDone[i]);
Memory Management
 SEM_SIGNAL(fillSeat[carID]);
 SEM_WAIT(seatFilled[carID]);
 SEM_SIGNAL(rideOver[carID]);
5
Project 3 Assignment
Step 2: Car Tasks (example)
// For each car, do 3 times:
{
SEM_WAIT(fillSeat[carID]);
SEM_SIGNAL(getPassenger);
SEM_WAIT(seatTaken);
SWAP; // wait for available seat
SWAP; // signal for visitor
SWAP; // wait for visitor to reply
... save passenger "rideover" semaphore ...
SEM_SIGNAL(passengerSeated);
SWAP: // signal visitor in seat
// if last passenger, get driver
{
SEM_WAIT(needDriverMutex);
SWAP;
// wakeup attendant
SEM_SIGNAL(wakeupDriver);
SWAP;
... save driver "rideover" semaphore ...
// got driver (mutex)
SEM_SIGNAL(needDriverMutex); SWAP;
}
SEM_SIGNAL(seatFilled[carID]);
}
SEM_WAIT(rideOver[myID]);
SWAP; // signal next seat ready
SWAP; // wait for ride over
... release passengers and driver ...
BYU CS 345
Memory Management
6
Project 3 Assignment
Step 3: Visitor Tasks

Design visitor functionality and car task interface.
worry about tickets yet.)




(Don’t
Each task visitor should create its own timing semaphore, which is
used for timing functions (ie, arrival delay, standing in lines, time in gift
shop or museum.) The delta clock should be used to SEM_SIGNAL
these semaphores.
Park visitors should randomly arrive at the park over a 10 second
period. In addition, visitors should stand in lines for a random time
before requesting a ticket or entrance to the museum or gift shop (3
seconds maximum).
The “SWAP” directive should be inserted after every line of
code in your Jurassic Park simulation. Park critical code
must be protected by the parkMutex mutex.
The park simulation creates a “lostVisitor” task which sums
critical variables in the park to detect any lost visitors.
BYU CS 345
Memory Management
7
Project 3 Assignment
Step 3: Visitor Tasks



Use resource semaphores (counting) to control access
to the park, the number of tickets available, and the
number of people allowed in the gift shop and museum.
Use mutex semaphores (binary) to protect any critical
sections of code within your implementation, such as
when updating the delta clock, acquiring a driver to buy
a ticket or drive a tour car, accessing global data, or
sampling the state of a semaphore.
Use semaphores (binary) to synchronize and
communicate events between tasks, such as to awaken
a driver, signal data is valid, signal a mode change, etc.
BYU CS 345
Memory Management
8
Semaphores

Use resource semaphores (counting) to control access
to the park, the number of tickets available, and the
number of people allowed in the gift shop and museum.
// create MAX_TICKETS tickets using counting semaphore
tickets = createSemaphore("tickets", COUNTING, MAX_TICKETS); SWAP;
// buy a ticket (consume)
SEM_WAIT(tickets);
SWAP;
// resell ticket (produce)
SEM_SIGNAL(tickets);
SWAP;
CS 345
Lab 3 – Jurassic Park
Start with
MAX_TICKETS
9
Semaphores

Use mutex semaphores (binary) to protect any critical
sections of code, such as when updating the delta clock,
acquiring a driver to buy a ticket or drive a tour car,
accessing global data, or sampling the state of a
semaphore.
Only 1 visitor at a
// need ticket, (1 at a time)
time requesting
SEM_WAIT(getTicketMutex);
SWAP;
a ticket
{
// Signal needTicket, Signal wakeUpDriver,
Wait ticketReady,
}
// allow next visitor to purchase ticket
SEM_SIGNAL(getTicketMutex);
SWAP;
CS 345
Lab 3 – Jurassic Park
10
Semaphores

Use signal semaphores (binary) to synchronize and
communicate events between tasks, such as to awaken a
driver, signal data is valid, etc.
// signal need ticket (produce raised hand up)
SEM_SIGNAL(needTicket);
SWAP;
// wakeup driver (produce wakeup call, driver consumes)
SEM_SIGNAL(wakeupDriver);
SWAP;
// wait ticket available (consume, driver produced ticket)
SEM_WAIT(ticketReady);
SWAP;
// buy ticket (produce driver consumes notification)
SEM_SIGNAL(buyTicket);
SWAP;
// put hand down (consume, done)
SEM_WAIT(needTicket);
CS 345
SWAP;
Lab 3 – Jurassic Park
11
Shared Memory

Shared memory can be implemented using C global
memory when protected with mutex semaphores.
// protect shared memory access
SEM_WAIT(parkMutex);
;SWAP
// access inside park variables
myPark.numOutsidePark--;
myPark.numInPark++;
;SWAP
;SWAP
// release protect shared memory access
SEM_SIGNAL(parkMutex);
;SWAP
CS 345
Lab 3 – Jurassic Park
12
Passing Semaphores

Shared memory can be implemented using C global
memory when protected with mutex semaphores.
// signal resource ready
SEM_WAIT(resourceMutex); SWAP;
SEM_WAIT(needPassenger); SWAP:
gSemaphore = mySemaphore; SWAP;
SEM_SIGNAL(resourceReady); SWAP;
SEM_WAIT(resourceAcquired); SWAP;
SEM_SIGNAL(resourceMutex); SWAP;
// signal resource ready
SEM_SIGNAL(needPassenger); SWAP;
SEM_WAIT(resourceReady); SWAP:
gSemaphore = mySemaphore; SWAP;
SEM_SIGNAL(resourceAcquired); SWAP;
CS 345
Lab 3 – Jurassic Park
13
Jurassic Park struct
# Waiting to Enter Park
numOutsidePark
Tour Car Line
numInCarLine
# of Passengers
park.cars[ ].passengers
Ticket Line
numInTicketLine
Driver Status
typedef struct
park.drivers[ ]
{
# Tickets Available int numOutsidePark;
// # outside of park
numTicketsAvailable
int numInPark;
// # in park (P=#)
int numTicketsAvailable;
// # left to sell (T=#)
int numRidesTaken;
// # of tour rides taken (S=#)
# in Park
int
numExitedPark;
// # who have exited the park
numInPark
int numInTicketLine;
// # in ticket line
int numInMuseumLine;
// # in museum line
int
numInMuseum;
//
#
in museum
# Rides Taken
int numInCarLine;
// # in tour car line
numRidesTaken
int numInCars;
// # in tour cars
int numInGiftLine;
// # in gift shop line
# Exited Park
int numInGiftShop;
// # in gift shop
numExitedPark
int drivers[NUM_DRIVERS];
// driver state (-1=T, 0=z, 1=A, 2=B, etc.)
CAR cars[NUM_CARS];
// cars in park
} JPARK;
# in Gift Shop
numInGiftShop
CS 345
Gift Shop Line
numInGiftLine
# in Museum
numInMuseum
Lab 3 – Jurassic Park
Museum Line
numInMuseumLine
14
Project 3 Assignment
Step 4: Driver Tasks

Develop the driver task.




Design driver functionality and interface with visitor/car tasks.
Implement design and integrate with os345, visitor, and car
tasks. (Now is the time to worry about ticket sales and driver
duties.)
Add ticket sales and driver responsibilities.
When a driver is awakened, use the semTryLock function to
determine if a driver or a ticket seller is needed.
BYU CS 345
Memory Management
15
Project 3 Assignment
Driver Task
int driverTask(int argc, char* argv[])
{
char buf[32];
Semaphore* driverDone;
int myID = atoi(argv[1]) - 1;
SWAP;
// get unique drive id
printf(buf, "Starting driverTask%d", myID);
SWAP;
sprintf(buf, "driverDone%d", myID + 1);
SWAP;
driverDone = createSemaphore(buf, BINARY, 0);
SWAP;
// create notification event
while(1)
// such is my life!!
Should this
{
mySEM_WAIT(wakeupDriver);
SWAP;be mutexed?
// goto sleep
if (mySEM_TRYLOCK(needDriver))
// i’m awake
- driver needed?
{
// yes
driverDoneSemaphore = driverDone;
SWAP;
// pass notification semaphore
mySEM_SIGNAL(driverReady);
SWAP;
// driver is awake
mySEM_WAIT(carReady);
SWAP;
// wait for car ready to go
mySEM_WAIT(driverDone);
SWAP;
// drive ride
}
else if (mySEM_TRYLOCK(needTicket))
// someone need ticket?
{
// yes
mySEM_WAIT(tickets);
SWAP;
// wait for ticket (counting)
mySEM_SIGNAL(takeTicket);
SWAP;
// print a ticket (binary)
}
else break;
// don’t bother me!
}
return 0;
} // end driverTask
BYU CS 345
Memory Management
16
CS 345
Stalling’s Chapter
#
Project
1: Computer System Overview
2: Operating System Overview
4
P1: Shell
3: Process Description and Control
4: Threads
4
P2: Tasking
5: Concurrency: ME and Synchronization
6: Concurrency: Deadlock and Starvation
6
P3: Jurassic Park
7: Memory Management
8: Virtual memory
6
P4: Virtual Memory
9: Uniprocessor Scheduling
10: Multiprocessor and Real-Time Scheduling
6
P5: Scheduling
11: I/O Management and Disk Scheduling
12: File Management
8
P6: FAT
Student Presentations
6
BYU CS 345
Memory Management
17
Chapter 7 Learning Objectives
After studying this chapter, you should be able to:
 Discuss the principal requirements for memory
management.
 Understand the reason for memory partitioning and
explain the various techniques that are used.
 Understand and explain the concept of paging.
 Understand and explain the concept of segmentation.
 Assess the relative advantages of paging and
segmentation.
 Summarize key security issues related to memory
management.
 Describe the concepts of loading and linking.
BYU CS 345
Memory Management
18
Requirements
Memory Management Requirements

Relocation




Protection



Allow processes to share data/programs
Logical Organization


Prevent processes from interfering with the O.S. or other processes
Often integrated with relocation
Sharing


Users generally don’t know where they will be placed in main memory
May swap in at a different place (pointers???)
Generally handled by hardware
Support modules, shared subroutines
Physical Organization


Main memory verses secondary memory
Overlaying
BYU CS 345
Memory Management
19
Address Binding


A process must be tied to a
physical address at some point
(bound)
Binding can take place at 3 times

Compile time


Load time



Always loaded to same memory address

BYU CS 345
Compiler/Assembler
object
Linker
load module
relocatable code
stays in same spot once loaded
Execution time

source
may be moved during execution
special hardware needed
Memory Management
Loader
Executable
20
Memory Management Techniques

Fixed Partitioning



Dynamic Partitioning



Divide memory into partitions at boot time, partition sizes
may be equal or unequal but don’t change
Simple but has internal fragmentation
Create partitions as programs loaded
Avoids internal fragmentation, but must deal with external
fragmentation
Simple Paging


Divide memory into equal-size pages, load program into
available pages
No external fragmentation, small amount of internal
fragmentation
BYU CS 345
Memory Management
21
Memory Management Techniques

Simple Segmentation



Virtual-Memory Paging




Divide program into segments
No internal fragmentation, some external fragmentation
Paging, but not all pages need to be in memory at one time
Allows large virtual memory space
More multiprogramming, overhead
Virtual Memory Segmentation



Like simple segmentation, but not all segments need to be in
memory at one time
Easy to share modules
More multiprogramming, overhead
BYU CS 345
Memory Management
22
Fixed Partitioning



Main memory divided into
static partitions
Simple to implement
Inefficient use of memory



Small programs use entire
partition
Maximum active processes
fixed
Internal Fragmentation
BYU CS 345
Memory Management
Operating System
8M
8M
8M
8M
8M
23
Fixed Partitioning

Variable-sized partitions



assign smaller programs to smaller
partitions
lessens the problem, but still a
problem
Placement




2M
4M
6M
8M
Which partition do we use?


Operating System
8M
Want to use smallest possible partition
What if there are no large jobs waiting?
Can have a queue for each partition
size, or one queue for all partitions
8M
12 M
Used by IBM OS/MFT, obsolete
Smaller partition by using overlays
BYU CS 345
Memory Management
24
Placement Algorithm w/Partitions

Equal-size partitions


because all partitions are of equal size, it
does not matter which partition is used
Unequal-size partitions



can assign each process to the smallest
partition within which it will fit
queue for each partition
processes are assigned in such a way as to
minimize wasted memory within a partition
BYU CS 345
Memory Management
25
Process Queues
 When its time to load a process into main
memory the smallest available partition that will
hold the process is selected
Operating
System
New
Processes
BYU CS 345
Operating
System
New
Processes
Memory Management
26
Dynamic Partitioning



Partitions are of variable length and
number
Process is allocated exactly as much
memory as required
Eventually get holes in the memory.


external fragmentation
Must use compaction to shift processes so
they are contiguous and all free memory is
in one block
BYU CS 345
Memory Management
27
Allocation Strategies

First Fit


Best Fit


Search through all the spots, allocate the spot in
memory that most closely matches requirements.
Next Fit


Allocate the first spot in memory that is big enough to
satisfy the requirements.
Scan memory from the location of the last placement
and choose the next available block that is large
enough.
Worst Fit

The largest free block of memory is used for bringing
in a process.
BYU CS 345
Memory Management
28
Which Allocation Strategy?

The first-fit algorithm is not only the simplest but
usually the best and the fastest as well.


The next-fit algorithm will more frequently lead to
an allocation from a free block at the end of
memory.



May litter the front end with small free partitions that must
be searched over on subsequent first-fit passes.
Results in fragmenting the largest block of free memory.
Compaction may be required more frequently.
Best-fit is usually the worst performer.


Guarantees the fragment left behind is as small as possible.
Main memory quickly littered by blocks too small to satisfy
memory allocation requests.
BYU CS 345
Memory Management
29
Dynamic Partitioning Placement Algorithm
8K
8K
12K
12K
Allocate 18K
22K
Last
allocated
block (14K)
First Fit
18K
Next Fit
Best Fit
8K
6K
6K
14K
14K
36K
BYU CS 345
2K
8K
20K
Allocated block
Free block
6K
Before
After
Memory Management
30
Memory Fragmentation
Memory Fragmentation


As memory is allocated and deallocated
fragmentation occurs
External 

Enough space exists to launch a program,
but it is not contiguous
Internal 
Allocate more memory than asked for to
avoid having very small holes
BYU CS 345
Memory Management
31
Memory Fragmentation
Memory Fragmentation

Statistical analysis shows that given N
allocated blocks, another 0.5 N blocks will
be lost due to fragmentation.

On average, 1/3 of memory is unusable


(50-percent rule)
Solution – Compaction.


Move allocated memory blocks so they are
contiguous
Run compaction algorithm periodically


BYU CS 345
How often?
When to schedule?
Memory Management
32
Buddy System
Buddy System








Tries to allow a variety of block sizes while avoiding
excess fragmentation
Blocks generally are of size 2k, for a suitable range of k
Initially, all memory is one block
All sizes are rounded up to 2s
If a block of size 2s is available, allocate it
Else find a block of size 2s+1 and split it in half to create
two buddies
If two buddies are both free, combine them into a larger
block
Largely replaced by paging

Seen in parallel systems and Unix kernel memory allocation
BYU CS 345
Memory Management
33
Relocation
Addresses

Logical



Relative


reference to a memory location independent of
the current assignment of data to memory
translation must be made to the physical
address
address expressed as a location relative to
some known point
Physical

the absolute address or actual location
BYU CS 345
Memory Management
34
Relocation
Hardware Support for Relocation
Relative address
Process Control
Block
Base Register
Adder
Absolute
address
Program
Comparator
Interrupt to
operating system
Data / Stack
Bounds Register
Kernel Stack
Process image in
main memory
BYU CS 345
Memory Management
35
Relocation
Base/Bounds Relocation

Base Register



Bounds Register




Used to detect accesses beyond the end of
the allocated memory
May have length instead of end address
Provides protection to system
Easy to move programs in memory


Holds beginning physical address
Add to all program addresses
These values are set when the process is
loaded and when the process is swapped in
Largely replaced by paging
BYU CS 345
Memory Management
36
Paging
Paging



Partition memory into small equal-size chunks
and divide each process into the same size
chunks
The chunks of a process are called pages and
chunks of memory are called frames
Operating system maintains a page table for
each process


contains the frame location
for each page in the process
memory address consist of a
page number and offset
within the page
BYU CS 345
Memory Management
37
Paging
Paging (continued…)

Page size typically a power of 2 to simplify the
paging hardware

Example (16-bit address, 1K pages)




010101 011011010
Top 6 bits (010101)= page #
Bottom 10 bits (011011010) = offset within page
Common sizes: 512 bytes, 1K, 4K
A
0
1
2
3
BYU CS 345
B
-
C
7
8
9
10
D Free
4 13
5 14
6
11
12
Memory Management
38
Paging
Paging
Frame
Number
0
A.0
0
0
1
A.1
1
2
A.2
3
A.3
B.0
D.0
4
6
B.1
D.1
B.2
D.2
7
C.0
8
5
7
13
1
0
1
8
14
2
2
2
9
3
3
3
10
Process C
Process A
0
4
---
0
4
C.1
1
5
---
1
5
9
C.2
2
6
---
2
6
10
C.3
3
11
11
D.3
4
12
12
D.4
Process B
Free Frame List
Process D
13
14
BYU CS 345
Memory Management
39
Segmentation
Segmentation

Program views memory as a set of segments of
varying sizes






Supports user view of memory
Easy to handle growing data structures
Easy to share libraries, memory
Privileges can be applied to a segment
Programs may use multiple segments
Implemented with a segment table

Array of base-limit register pairs



BYU CS 345
Beginning address (segment base)
Size (segment limit)
Status bits (Present, Modified, Accessed, Permission,
Protection)
Memory Management
40
Segmentation
Segmentation/Paging

In Pentium systems




CPU generate logical addresses
Segmentation unit produces a linear address
Paging unit generates physical address in
memory
(Equivalent to an MMU)
logical
address
CPU
BYU CS 345
Segmentation
Unit
linear
address
Paging
Unit
Memory Management
physical
address
Physical
Memory
41
BYU CS 345
Memory Management
42
Exam I
27. Why would early versions of the UNIX operating
system be unsuitable for real-time applications?
a. Because a process executing in kernel mode acts
like a user functions.
b. Because a process executing in user mode may
not be preempted.
c. Because maximum latency to process an interrupt
could not be guaranteed.
d. Untrue. UNIX is well suited for real-time
applications.
30. During its lifetime, a process moves among a
number of states. The most important of these are
a. Executing and Blocked.
b. Idaho, Utah, Wyoming, and Nebraska.
c. New, Running, and Suspended.
d. Ready, Running, and Blocked.
62. What are the software contexts in which
concurrency becomes an issue?
e. Multiprogramming, modularity, system software
BYU CS 345
Memory Management
43
Download