Week 8 Locking, Linked Lists, Scheduling Algorithms
-
Upload
josephine-crew -
Category
Documents
-
view
16 -
download
2
description
Transcript of Week 8 Locking, Linked Lists, Scheduling Algorithms
![Page 1: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/1.jpg)
1
Week 8Locking, Linked
Lists, Scheduling Algorithms
Classes COP4610 / CGS5765
Florida State University
![Page 2: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/2.jpg)
Concurrency Aspects of Project 2 Synchronizing access to request queue(s)
Multiple producers may access request queue(s) at the same time
Multiple consumers may access request queue(s) at the same time
Synchronizing access to other global data
![Page 3: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/3.jpg)
Elevator Concurrency
Passengers may appear on a floor at the same time as an elevator arrives at a floor
The procfs display may be read at the same time that you're updating
Number of passengers that you've serviced Total number of passengers on a given floor Other stuff, depending on your implementation
How do you guarantee correctness?
![Page 4: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/4.jpg)
Global Data vs. Local Data
Global data is declared at global scope, e.g. outside of any function body
Often necessary for kernel programming Particularly sensitive to concurrency issues
Be extra careful when handling globals
![Page 5: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/5.jpg)
Global Data vs. Local Data
Local data is declared within a function Local data is sensitive to concurrency issues
when it depends on global data or when parallel access is possible
Think carefully about whether it needs to be synchronized
5
![Page 6: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/6.jpg)
Synchronization Primitives Semaphores
User space Kernel space
Mutexes User space Kernel space
Spin locks Kernel space
Atomic Functions
![Page 7: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/7.jpg)
Synchronization Primitives(We'll Only Cover These) Mutexes
User space Kernel space
Does anyone remember the differences between a mutex and semaphore?
![Page 8: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/8.jpg)
The Mutex
Caught up in the mutex?
8
![Page 9: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/9.jpg)
Mutexes
Mutex – A construct to provide MUTual EXclusion
Based on the concept of a semaphore Found at
<source_dir>/include/linux/mutex.h Can be locked or unlocked
Only one thread of execution may hold the lock at a time
![Page 10: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/10.jpg)
mutex_init(&mutex)
Declare and initialize a mutex Only initialize it once
Kernel-Space Mutex - Initialization
![Page 11: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/11.jpg)
Kernel-Space Mutex - Locking void mutex_lock(struct mutex *);
int mutex_lock_interruptible(struct mutex *);
mutex_lock() can wait indefinitely mutex_lock_interruptible() locks a mutex as long as it is not interrupted
returns 0 if locking succeeded, < 0 if interrupted Use of the interruptible version is typically preferred
![Page 12: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/12.jpg)
Kernel-Space Mutex – Unlocking void mutex_unlock(struct mutex *);
Guarantees that the mutex is unlocked Why is there no interruptible version of this
function?
12
![Page 13: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/13.jpg)
Kernel-Space Mutex Example/* Declare your mutex */struct mutex my_mutex;
/* Initialize your mutex */mutex_init(&my_mutex);
/* Lock */if(mutex_lock_interruptible(&my_mutex))
return -ERESTARTSYS;
/* Do stuff to protected global variables */
/* Unlock */mutex_unlock(&my_mutex);
13
![Page 14: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/14.jpg)
User-Space Mutex
Used with pthreads Might be useful if you are prototyping your
elevator in user-space before porting to kernel
14
![Page 15: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/15.jpg)
User-Space Mutex - Initialization int pthread_mutex_init(pthread_mutex_t *, NULL);
int pthread_mutex_destroy(pthread_mutex_t *);
Pthread_mutex_init() dynamically allocates a mutex
Pthread_mutex_destroy() frees a mutex
![Page 16: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/16.jpg)
User-Space Mutex - Locking int pthread_mutex_lock(pthread_mutex_t *);
Returns 0 on locking, < 0 otherwise
![Page 17: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/17.jpg)
User-Space Mutex - Unlocking int pthread_mutex_unlock(pthread_mutex_t *);
Returns 0 on unlocking, < 0 otherwise
![Page 18: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/18.jpg)
Kernel Linked Lists
More elegant than arrays, but takes some getting used to…
18
![Page 19: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/19.jpg)
Kernel Linked Lists
Linux kernel provides generic doubly- and singly-linked list implementations for use in kernel code
Take advantage of it! Likely to prove useful for implementing
queue processing system in project 2 Found in <linux source>/include/linux/list.h
![Page 20: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/20.jpg)
Kernel Linked Lists
Pros Safer and saves time over implementing them
yourself Handy functions already defined for your use Can dynamically represent a FIFO
Cons Pointers can be a bit tricky
![Page 21: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/21.jpg)
struct list_head
struct list_head{ struct list_head *next, *prev;};
• A kernel linked list consists of only a next and prev pointer to a list_head structure.
• Start with an empty list_head
• Next connect to other list_heads embedded into your structures
![Page 22: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/22.jpg)
struct list_head
22
*Picture taken from Linux Device Drivers, 3 ed.
![Page 23: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/23.jpg)
Initialize a list_head
/* Declare the start of the list*/struct list_head todo_list;
/* Initialize the list to empty */INIT_LIST_HEAD(&todo_list);
Declares and initializes an empty linked list called todo_list
Note the INIT_LIST_HEAD function takes a pointer
23
![Page 24: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/24.jpg)
Embedding a list_head into your own structsstruct tasks1{ struct list_head list; int task_id; void *task_data;}; We can define a struct that holds more
valuable information with an empty list_head struct inside
How do we add this struct to the main list?
24
![Page 25: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/25.jpg)
/* Declare a struct * with an embedded list_head */
struct tasks1 *my_task;
/* Kmalloc and fill in my_task with data you care about here… */
/* Add the my_task struct to the last element in the list using list_add_tail() */
list_add_tail(&my_task->list, &todo_list);
List_add_tail() can be used to implement a FIFO
Adding an element to the list
25
![Page 26: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/26.jpg)
Other Linked List Functions Deleting items from the list
list_del(struct list_head *entry); list_del_init(struct list_head *entry);
Go from list_head to surrounding struct list_entry(struct list_head *ptr, type_of_struct, field_name);
26
![Page 27: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/27.jpg)
Other Linked List Functions Iterate through a linked list
list_for_each(struct list_head *cursor, struct list_head *list)
For full definitions and examples, check out page 295 at http://lwn.net/images/pdf/LDD3/ch11.pdf
27
![Page 28: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/28.jpg)
Elevator Scheduling
28
![Page 29: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/29.jpg)
General Advise
Just make elevator work first Use a very simple algorithm
Optimize if there is time
29
![Page 30: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/30.jpg)
FIFO
Method: Service requests in order they arrive
Pros: + No computational time expended to choose
requests + Implementation: As easy as it gets + Fair: Every requests gets a turn
Cons: - Terrible for random requests!
Elevator may backtrack back and forth several times in processing requests
- Low throughput potential
![Page 31: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/31.jpg)
Shortest Seek Time First
Method: Service requests near elevator first
Pros: + Very low computational time expended + Implementation: Fairly easy + Throughput: Fairly high – may minimize
seek time Cons:
- Unfair: May starve distant requests - May ignore distant clusters of requests
![Page 32: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/32.jpg)
SCAN
Method: Service requests in one direction, then go
backwards Pros:
+ Very low computational time expended + Implementation: Fairly easy (go up, go down,
go up) + Throughput: somewhat high + Fair: No starvation
Cons: - May take up to two elevator trips to collect a set
of requests (up, down)
![Page 33: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/33.jpg)
LOOK
Method: Improvement on SCAN – same method (almost) Uses information of request locations to determine
where to stop going in a certain direction. Pros:
+ Low computational time expended + Implementation: Moderate (set upper bound, go up,
set lower bound, go down) + Throughput: somewhat high + Fair: No starvation
Cons: - May miss a new request at outer boundary just as
direction change occurs
![Page 34: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/34.jpg)
Hybrid
Combine methods, come up with something new
Up to your creativity
34
![Page 35: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/35.jpg)
Project Demos and Deliverables
35
![Page 36: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/36.jpg)
Basic Information
Project 2 is due on October 26th
Due at demo time Please sign up for a time to demo your
elevator project If you wish to use slack days, make an
appointment with me on the day you wish to turn in your project
36
![Page 37: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/37.jpg)
Project Deliverables
Before demo, please compress and send me the following README Project report Part 1 – source and Makefile Part 2 – source and Makefile Part 3 – source and Makefile
Just send me files you have added (for example, you don’t need to send me the syscall_table_32.S file)
37
![Page 38: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/38.jpg)
Demo
Will only have time to demo Part 3 – elevator Please look at grading sheet to understand
what I will be looking for
38
![Page 39: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/39.jpg)
Getting Help
I will be holding extra help sessions again next week in LOV 16 Tuesday: 5:15pm-6:30pm Thursday: 2:00pm-3:15pm
Regular office hours Alejandro -- M W 9:00am-10:00am and by
appointment Sarah – W 12:30pm-1:30pm, F 3:30pm-4:30pm
and by appointment
39
![Page 40: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/40.jpg)
Next Friday
We are ahead in recitation lectures, so next recitation will be my office hours Replacing the 3:30pm-4:30pm hours on October
22nd
40
![Page 41: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/41.jpg)
Test Elevator Driver
Test elevator driver will be posted before the end of the weekend Will randomly test system calls
Make sure system calls are registered to the following numbers in syscall_table_32.S: start_elevator 337 issue_request 338 stop_elevator 339
41
![Page 42: Week 8 Locking, Linked Lists, Scheduling Algorithms](https://reader036.fdocuments.us/reader036/viewer/2022062720/568134e5550346895d9c1ac9/html5/thumbnails/42.jpg)
Any Questions?
42