Lab 2 Solution

$30.00

Category:

Description

In this lab you will implement priority based thread scheduling for Pintos.

 

As supplied, Pintos implements a first-come-first-served (FCFS) ready queue with a periodic interrupt to implement a round-robin (RR) style of scheduler.

 

NOTE: We have not covered the FCFS or RR scheduling algorithms in the lectures yet, neither have we covered Semaphores and Condition Variables, but we will be doing so soon. The concept or a prioritized ready queue is not hard to grasp, so I strongly recommend you make a start on this lab immediately.

 

There are three increasingly complex dependent parts to this lab:

 

  • Implementing the prioritized ready queue

 

  • Handling priority in concurrency primitives

 

  • Implementing priority donation between threads interacting with each other through these concurrency primitives.

 

This lab is worth 15% of your final grade.

 

Submissions are due NO LATER than 23:59, Wednesday May 2, 2018 ( three weeks )

 

 

 

Setup

 

SSH in to one of the two CMPS111 teaching servers using your CruzID Blue password:

 

Or $ ssh <cruzid>@noggin.soe.ucsc.edu ( use Putty http://www.putty.org/ if on Windows )
$ ssh <cruzid>@nogbad.soe.ucsc.edu

 

Authenticate with Kerberos:

 

$ kinit <cruzid>@CATS.UCSC.EDU

 

Authenticate with AFS:

 

$ aklog

 

Create a suitable place to work: ( only do this the first time you log in )

 

$ mkdir –p ~/CMPS111/Lab2

 

$ cd ~/CMPS111/Lab2

 

Install the lab environment: ( only do this once )

 

$ tar xvf /var/classes/CMPS111/Spring18/Lab2.tar.gz

 

Build Pintos:

 

 

$ cd ~/CMPS111/Lab2/pintos/src/threads $ make
( always work in this directory )

 

Also try:

 

 

$ make check                ( runs the required functional tests – see below )

 

$ make grade                ( tells you what grade you will get – see below )

 

 

 

 

 

 

 

 

Accessing the teaching servers file systems from your personal computer

 

Follow the instructions from Lab 1:

 

https://classes.soe.ucsc.edu/cmps111/Spring18/SECURE/CMPS111-Lab1.pdf

 

 

 

Background Information

 

(1) Priority Based Ready Queues

 

Thread priorities range from PRI_MIN (0) to PRI_MAX (63). Lower numbers correspond to lower priorities, so that priority 0 is the lowest priority and priority 63 is the highest.

 

The initial thread priority is passed as an argument to thread_create(). If there’s no reason to choose another priority, consumer code should use PRI_DEFAULT (31) when creating a thread.

 

  • When a thread is added to the ready list at creation, if this new thread has a higher priority than the currently running thread, the current thread must immediately yield the processor to the new thread.

 

  • When thread priority is raised or lowered via thread_set_priority(), you may need to reorder the ready queue, and take appropriate action (known as “preempting”) if a thread with higher priority that the currently executing thread is now waiting.

 

 

 

  • Priority and Concurrency

 

When threads are waiting for a lock, semaphore, or condition variable, the highest priority waiting thread should be woken up first.

 

  • Pintos locks use semaphores, so once your implementation for semaphores is working, it will, or at least, should also be working for locks.

 

 

 

  • Priority Donation

 

One issue with priority scheduling is “priority inversion”.

 

Consider high, medium, and low priority threads H, M, and L, respectively.

 

If H needs to wait for L (because, for example, L holds a lock H would like to acquire), and M is on the ready list, then H will not get the CPU because the low priority thread L will never get scheduled ahead of M.

 

A partial fix for this problem is for H to “donate” its priority to L while L is holding the lock, then recall the donation once L releases (and thus H acquires) the lock.

 

Priority donation implementations need to account for a number of different situations in which priority donation is required:

 

  • Multiple Donations: Multiple priorities are donated to a single thread.

 

  • Nested & Chained Donations: If H is waiting on a lock that M holds and M is waiting on a lock that L holds, then both M and L should be boosted to H’s priority.

 

 

 

 

 

 

 

 

University of California Santa Cruz Baskin School of Engineering                    CMPS111 Spring 2018 Lab 2                     Copyright © 2017-2018 David C. Harrison. All rights reserved.

 

Requirements

 

Basic:

 

  • Change the supplied FCFS ready queue into a priority based ready queue

 

  • Pass the following tests:

 

  • alarm-priority o priority-preempt o priority-change
  • priority-fifo

 

Advanced:

 

  • Implement priority waiting for locks, semaphores, and condition variables

 

  • Pass the following tests:
  • priority-sema
  • priority-condvar

 

Stretch:

 

  • Implement single-level priority donation, including multiple donations

 

  • Pass the following tests:

 

  • priority-donate-single o priority-donate-one o priority-donate-lower

o priority-donate-multiple o priority-donate-multiple2 o priority-donate-sema

 

  • priority-donate-condvar

 

Extreme:

 

  • Implement nested and chained priority donation

 

  • Pass the following tests:
  • priority-donate-nest
  • priority-donate-chain

 

 

What to submit

 

In a command prompt:

 

$ cd ~/CMPS111/Lab2/pintos/src/threads

 

$ make submit

 

This creates a gzipped tar archive named CMPS111-Lab2.tar.gz in your home directory.

 

UPLOAD THIS FILE TO THE APPROPRIATE CANVAS ASSIGNMENT.

 

In addition to submitting modified and new source files, you are required to write a short report (no more than two pages) on your work.

 

This report should contain at least:

 

  • A defense of the rationale behind your design

 

  • Details of tests your submission fails and what investigations you undertook to try and find out why

 

If you keep a simple journal as you work your way through this lab, writing the report will be easy – it’s essentially a tidied up version of your journal.

 

SUBMIT YOU REPORT TO CANVAS IN THE SAME ASSIGNMENT AS YOUR CODE ARCHIVE.

 

Note that the report WILL NOT BE READ unless plagiarism is detected in your submission.

 

University of California Santa Cruz Baskin School of Engineering                    CMPS111 Spring 2018 Lab 2                     Copyright © 2017-2018 David C. Harrison. All rights reserved.

 

What steps should I take to tackle this?

 

Come to the sections and ask.

 

 

How much code will I need to write?

 

A model solution that satisfies all requirements adds approximately 200 lines of executable code.

 

 

Grading scheme

 

The following aspects will be assessed:

 

  1. (100%) Does it work?

 

a. Basic Requirements (40%)
b. Advanced Requirements (30%)
c. Stretch Requirements (20%)
d. Extreme Requirements (10%)

 

  1. (-100%) Did you give credit where credit is due?

 

  1. You submission is found to contain code segments copied from on-line resources and you failed to give clear and unambiguous credit to the original author(s) in your source code (-100%)

 

  1. You submission is determined to be a copy of another past or current CMPS111 student’s submission (-100%)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

University of California Santa Cruz Baskin School of Engineering                    CMPS111 Spring 2018 Lab 2                     Copyright © 2017-2018 David C. Harrison. All rights reserved.


error: Content is protected !!