Philosophy
Some general thoughts about programming projects in CMSC 412, I
have numbered them to make them easier to reference in discussions
about them.
- CMSC 335, Object-Oriented and Concurrent Programming
- The project in this class uses threads
- One large project developed in 4 main phases
- Simulation of:
- Seaport with ships, ports, docks, jobs and resources
(persons with skills at each port)
- Sorcerer's Cave with creatures, artifacts, treasures,
parties and jobs requiring certain artifact types
- CMSC 412
- The list of topics is shown below (and in the links above)
- Projects
- I would like the students to do some interesting programming
related to the topics in this class
- The programming projects should be appropriately challenging
- I would like to see programming projects be term (8 weeks)
long
- I think weekly reports are most appropriate for this kind
of flexible system
- The primary topics revolve around the elements an operating
system should address:
- processes and threads
- file systems
- memory allocation
- resource access and protection
- I/O devices
- Disks
- memory
- communications: interprocess, interthread, distributed,
etc.
- I would like the students to propose their own projects with
guidance from the project list below
- I would suggest that students be encouraged/allowed to form
groups of 1, 2, or perhaps 3 members
- perhaps with only 2 or 3 students in a group, we can allow
pair programming and not have to worry too much about roles
since all the members will probably need to do all the roles
over the course of a project.
- the groups should be strongly encouraged to communicate
often, probably daily, to make sure they are on the same
page
- the weekly reports, and perhaps all the project artifacts,
should be public, ie, posted in the common discussion areas
of Leo
- this is a way to get everybody excited about the class
in general, their own contributions, and let each student
benefit from seeing how others are approaching their
projects.
- making work public has worked out extremely well in the
CMSC 495 classes
- public work also allows students to comment (nicely!)
and make suggestions that help other students do better
- Simulation projects
- Statistical projects
- Many events of some sort
- What is to be measured?
- What parameters are to be explored?
- What algorithms are to be explored?
- Proving that the simulations are actually implemeting the
proposed algorithms, parameters and measures correctly.
- Implementation projects
- Define the function set to be implemented
- Define the environment
- Define test scenarios to demonstrate the correctness of the
implemented functions and the environment
Executing processes
- Key question/issue: Show processes created, scheduled, queued
to one or more servers (CPU models)
- Elements:
- SimEntity - models a process
- EntityGenerator - creates processes with delay between
process
- Assign - update duration of process
- Distributions - used by generator and assignments
- EntitySink
- Server and Queue
- Conveyor - perhaps introduce a delay
Scheduling
processes/threads
- Some questions:
- How about adding CPU's (servers)?
- Time slicing?
- Different priority for queue (FIFO, LIFO, others)
- Multiple queues?
Synchronizing
processes/threads
- Use JaamSim objects, such as Resources, to simulate locks and
semaphores for synchronization
Deadlocks
- Again use Resources or a similar system to simulate a system
than can deadlock
- Consider implementing some approaches to detecting and
handling deadlocks
Memory
allocation, paging, segmentation
- Use arrays to simulate
- memory allocation
- segmentation
- process queuing waiting for memory allocation
- dynamic memory requests by processes
I/O system performance
- More resources, but with very different delay times
- Event processing
Disk access scheduling
- Experiment with a variety of scheduling algorithms
- Model disk delays
Distributed System
scheduling
- Similar to multiprocessing, but with interesting delay issues
- Add some synchronization and harmonization models
- Race conditions can be modeled here
(end)