Slashdot Mirror


Computer Science Curriculum Using Linux?

I couldn't resist posting this question from Kris Warkentin: "I am helping a professor at my school develop some projects for a third-year Operating Systems course. I told him that Linux would be good for that sort of thing, both as an example and as fodder for development. It is a single term (13 weeks) and students in Computer Science, while competent, are not exactly experienced programming wizards like Alan Cox. So, the question is, does anyone know of any nice little Linux-based programming projects which would give a feel for the OS internals? Maybe some of you have actually taken a course where you wrote a device driver or something? Any ideas or suggestions would be welcome."

This is a real cool idea. Are there any other schools doing something like this with Linux?

219 comments

  1. I suggest smoking crack by Anonymous Coward · · Score: 0

    it helped me through college

    1. Re:I suggest smoking crack by Anonymous Coward · · Score: 0

      I suggest speed (crystal). Remember, these are college kids and they don't have time for whoring. Besides, speed is more of an open source thing, since you can really get in and tweak the chemistry.

  2. real time linux by vipw · · Score: 2

    i'd suggest doing things with the real time linux kernel (rt-linux). While the student activity may not be directly benefitial to the linux movement, it is an understandable subset of the linux kernel which is designed to be easy to interact with from other kernel modules. besides the rt-linux project is important for embedded systems(an exploding market) and could definitely use a few more eyes.

  3. baby duck syndrome by xDroid · · Score: 0


    Just look at what apple's marketing strategy.
    Get the kids to use Apple's in the school and then when the kids grow up they will use Apples.
    In the same vein, I use vi because that is the editor I learned first and now I don't want to change.
    Humans are creatures of habit. They will imprint on the first thing that comes along.

    --

    * "Uncle this droid is malfunctioning" -- Luke Skywalker
    1. Re:baby duck syndrome by Anonymous Coward · · Score: 0

      Get the kids to identify Apple (and Linux) with being in Grammar school.

      Further, teach them that when they grow up they'll get to sit at the adult's table.

      Yes. It sounds excellent.

  4. this really isn't relevant by vipw · · Score: 1

    the question has more to do with what kernel projects students would learn more working with/on. what knowledge the students are able to take from the class is much more important that which programs they are familiar with. personally i dropped out because there was too much emphasis on familiarization with products than there was learning long-term programming skills.

  5. use topsy or something similar by Sultan · · Score: 2

    at my university, the 3rd year introductory OS course uses topsy as the os background
    and it involves writing such things as the
    virtual memory handling as one of the assignments.

    http://www.cse.unsw.edu.au/~cs3231/

    as it is now linux is probably too complex to be used, ie modified/improved on by most 3rd year students doing an intro OS course...

    1. Re:use topsy or something similar by gfa · · Score: 1
      I might add the URL to the Topsy home page here

      http://www.ee.ethz.ch/~topsy

      the cool part for teaching is its highly modular structure. For example, you can plug-in a scheduler by defining 4 functions.

      Or, the hardware abstraction layer (HAL) may be replaced for porting. The original HAL was written for MIPS R2000/R3000 processors and is quite small. Alternative HALs exist for R4000, i386, m68k and it even has a Solaris HAL to run it inside a Unix process...

      For teaching I'd strongly recommend to use something simple like MIPS or ARM as a basis.

      --
      "Thunder is good. Thunder is impressive. But it is the lightning that does the work."
  6. USB by frederik · · Score: 1

    Maybe you'd like to work at the USB drivers of the Linux Kernel. It needs some enhancement and I think the students would learn a lot by doing it ;)

    1. Re:USB by Malc · · Score: 1

      Although a nice idea, it won't help in three years time when the USB drivers have matured and no longer need much enhancement.

      I think that if I were setting up a university course I would try and avoid something so specific as I wouldn't want to have to completely re-write the course everytime I came to teach it. It's very time consuming, and if the base concepts haven't changed, rather pointless.

  7. Old Discussion theme!!! by Anonymous Coward · · Score: 0

    Look for discussions from Linus Torvalds and Tanenbaum: Why not extend MINIX to a full UNIX system. For the ones who don't know: Minix is an educational unix like system. Small, understandable.

  8. freshmeat by HomeySmurf · · Score: 1

    Right on the main page of Slashdot, you will find a link to freshmeat which list hundreds of open source projects of all types in various levels of completeness (sp?). They, of course, have a nice search feature, which is admitedly is not too great, but should do the job. Your professor should be able to find some project he likes there. It is also a great source of interesting code to analyze.

    --
    "Politics is for the moment, an equation lasts eternity" -A. Einstein
  9. Sounds very different.... by DeadSea · · Score: 2
    The course on Operating Systems I took at Cornell University had nothing to do with any specific operating system, or device drivers, or anything that I think it would really be easy to teach using linux. The only way I could see this working is by showing source code from the linux kernal as a real world example of how stuff as done.

    We spent a lot of time working with the things that you would need to have programs running simultanously on a single processor: mutex, protected memory schemes, and such.

    Maybe other colleges teach less theoretical OS classes, but I really don't see how it would fit in with what I took. (Granted after taking the coure I'm in no way a kernal hacker either, so there is probably a place for this somewhere...)

    1. Re:Sounds very different.... by Peter+Eckersley · · Score: 1
      I tutor OS here at the University of Melbourne. We also have a primarily theoretical course at 3rd year, and then a 4th year course which goes into great and messy depth on the implementation of 4.4BSD, but stops short of visiting any actual code. The 3rd year course does however include some projects on implementing abstracted cache and disk scheduling algorithms. The 4th year course could perhaps be Linux-ised by using one of the LDP kernel books.

      I agree that I can't see the point of cutting real-world code instead of doing this kind of course. *But* - once you've actually done that, you might want to move into playing with the real linux kernel. Don't start your own project unless you come up with a brilliant idea (like implementing an rsync based network filesystem :). Instead, go and find an interesting project (like USB, ReiserFS, or CODA) and work on that...

  10. Brazilian professor is a lame ass DOS sucker. by Anonymous Coward · · Score: 0

    I Hope you coordinator dont be stupid as mine ( university: Brasil - Sao PAULO - Osasco - FEAO ; professor: Marcio). He is lame as hell and thinks we only need to read a dirty book ( not tenembaum) whit examples in pascal, and use DOS like our basis. Oh, he also thinks unix is old , obsolete, and dont work for nothing.

  11. Process Manager by Kamran · · Score: 1

    In my university, we had to write a process manager, and add timeslicing, semaphores etc...
    Some people had very little experience of C, so the program was split into smaller chunks. Although we didn't actually create the process manager as such, we learnt the basic algorithms for the process manager, using a text input file and output what would be run at each clock cycle.
    You could also implement the Unix process priority system, giving priority to certain processes.

    We also in the following semester created a virtual memory manager.

  12. Good book for learning by mihalis · · Score: 2

    I would recommend looking into the book "Linux A-Z" by Phil Cornes. He starts off with an introduction to Linux for the complete beginner, but later on introduces neat little projects like Tiny Socket Library, Tiny Shell, Tiny Daemon and Tiny Device Driver. The writing is spare, accurate and elegant, and the book is even typeset (as far as I can tell) in Latex (love those computer modern fonts, just like the GNU manuals).

    Of course the material might have to be updated a little here and there to make sure it doesn't lead the students down any blind alleys, but the beauty of the self-contained "Tiny" case studies is that they contain enough code to illustrate the principles being expounded - just tweak them a little if the system interfaces have changed and they'll still be great teaching material.

    Chris Morgan

  13. Minix may be better by gbowland · · Score: 3
    Minix may actually be a better choice. That's what Electrical & Electronic Engineering at The University of Western Australia uses in its operating systems course.

    We also use Operating Systems: Design and Implementation (2nd edition) (Tanenbaum and Woodhull) as a textbook which includes Minix media and goes into great depth about the Minix OS.

    The Linux kernel may not be as well documented for educational purposes.

    1. Re:Minix may be better by DJStealth · · Score: 1

      In my school (Ryerson Polytechnic University in Toronto).. Our primary operating systems are Linux and Solaris.

      The 3rd year Advanced O/S course is based using Minix (yes, this is where linux came from) and one of the projects is to develop a memory manager for the O/S.

    2. Re:Minix may be better by Erk · · Score: 1

      Here at the University of Maine, our Operating Systems course (COS431) everything is Minix based. It gives you a good handle on how system calls are implemented, mutex, and more.

      Our project involves building a complete operating system titled Brain2k. Part I of Brain2k is building a VM which handles specific operations, and file I/O. Part II is a process scheduler allowing 10 seperate Brain programs to run simultaneously. We haven't gotten to Parts III or IV yet.

      As for our book, we are using Operating Systems by Tannebaum. It's a pretty good book, uses lots of examples like the Dining Philosopher's Problem, and more.

      If you have more questions, please email me!

    3. Re:Minix may be better by wct · · Score: 4
      I took this course last year and have to agree that for educational purposes Minix is a better choice. A strong point in it's favour is that you have an excellent textbook with an (almost) full source listing, so you can study the actual code while reading the textbook. The other advantage is that Minix implements the described OS algorithms in the most straightforward possible way. A beginner would be confused sifting through the Linux source when faced with the various assembler optimization tricks and hardware workarounds in there to speed up performance, and this detracts from the basics you're trying to teach.

      The other major factor I think of that favours Minix is that the codebase is completely stable, and has been for a long time. While it may have been at the root of the dispute between him and Torvalds, Tanenbaum's insistence on keeping the feature-set small enough to run on legacy hardware has made the code much more easily navigable and instructive. Having said that, comparing and contrasting the two would be valuable towards an overall understanding of the topic.

      The only thing annoying about Minix is that it didn't run under VMware at the time (v1.0), so when programming kernel patches you had to resort to using bochs in the code-test-debug cycle. Setting up bochs at home was a real pain, and it still ran painfully slowly.

      I don't think there is any book that fully documents in detail the workings of the Linux kernel like Tanenbaum does Minix; the rate that the kernel is evolving probably makes this a futile exercise. I do recall a thick book in the University library that covered the workings of a BSD kernel (NetBSD?), which would be handy in a course such as this, but not the title :(.

      Just random thoughts :)

    4. Re:Minix may be better by UM_Maverick · · Score: 1

      minix may be better, but I work with one of the authors of the book that you are using for the class...he ain't the brightest bulb in the group... Just thought I'd let you know =)

    5. Re:Minix may be better by chromatic · · Score: 1

      I don't think there is any book that fully documents in detail the workings of the Linux kernel like Tanenbaum does Minix;

      It doesn't get into as much detail as the Tanenbaum book, but CoriolisOpen Press put out the Linux Core Kernel Commentary recently. (It's on my stack of books to review, actually.) It's based on 2.2.5, and it owes a lot to Lions' commentary on Unix. That might be worth considering.

      Hm, looks like they have a brand new book covering the networking code. (http://www.coriolis.com)

      --

    6. Re:Minix may be better by Anonymous Coward · · Score: 0

      >Operating Systems by Tannebaum. It's a pretty good book, uses lots of examples like the Dining Philosopher's Problem. I think the solution to the dining philosopher's problem in the book is flawed...

    7. Re:Minix may be better by Anonymous Coward · · Score: 0

      >I work with one of the authors of the book that you are using for the class...he ain't the brightest bulb in the group...

      He must write the jokes for the book... :-)

  14. Filesystem by Tjl · · Score: 2

    For relatively advanced students, I'd recommend writing their own simple filesystem.

    For beginners, a new directory on /proc telling various things about the system state.

    Or re-develop an existing device driver.

  15. Mini-linux projects by Anonymous Coward · · Score: 0

    Most every small project would be a re-implementing a part of the linux kernel. Like the traditional serial driver approach. Anything that could privy its self for external debugging is a great plus. Just some thoughts

  16. don't underestimate the students by celticfiddleboy · · Score: 3

    One of my OS courses involved loading BSD3.0 on a machine. The instructor gave us an overview of the internal structures and by the end of the course we had to make a significant modification to the kernel. The modification didn't necessarily need to extend the product in a meaningful way, it just had to interact with the kernel in a manner that demonstrated we had an understanding of the kernel. I.E. My project was to create a new FS that would encrypt/decrypt the data being written/read to this filesystem. Modifications were made to the utils such as mount to recognize the new FS and ask for passwords. The encryption algorithm was just XORing 1 to the data but the point of the exercise was not to design strong encryption but to show knowledge of the kernel internals. With Linux it would be easy to instruct the students on the structure of the kernel and how to extend it with modules. Have them write simple programs to drive printers through the serial port. Get them debugging kernel code. Once you are elbow deep in, new and more complex projects will present themselves such as different scheduling algorithms. Don't underestimate what the students might be capable of.

  17. how about the alcatel? by SquierStrat · · Score: 1

    How about a device driver for the internal, or external USB Alcatel ADSL modems? :-) Would be kind of nice for those poor souls who were stuck with them by their evil ADSL provider.

    --
    Derek Greene
  18. Linux/MINIX by mud_dog · · Score: 2

    I'm currently taking an operating systems course in my 2nd year at university. The course uses MINIX as its example operating system. This includes using examples of how MINIX implements, say handling concurrent processes, in the leactures and also using MINIX as a base for the practical work in the course, although we don't actually fiddle with the MINIX code itself. I think that whatever OS you use in an OS course it is important to remeber that just studying that OS will not give a rounded a view of how OS's work. Rather the implementation of the OS studyed should be used as a getting off point to also look at the many alternative ways in which OS features can be implemented.

  19. Theory vs Practice by Ayrezyle · · Score: 1

    When I took my 3rd year CompSci OS course, we used an OS called Oberon on which we implemented the minix filesystem for a stiffy drive (University of Stellenbosch, South Africa, 1998).

    This was only the practical component. It was totally disconnected from the theory for which we used a (good, IMHO,) book by Deitel .

    I liked the theory but not the OS (Oberon; you think linux has interface blues!?!?). Which in turn meant I liked the theory but not the practicals. However, I was exposed to both teory and a real life OS with it's own design decisions etc. which was open for me to analyse and critisize. Going back to the theory then meant I could match the decisions made by the designers with the tradeoffs, benefits & penalties explained in theory.

    I think linux (or a scaled down version of it) is an excellent idea for CompSci practical work. Especially because of the Open Source nature and the *nix introduction it offers.

  20. Prof.'s Objections are weak. by Martin+S. · · Score: 1

    Possibly the Prof.'s problem is that by choosing an open OS such as Linux over some obscure proprietary system, they could very easily be trumped by there students?

    The scope could be readily limited by confining study to the Kernel and since Linux (the Kernel) was written AFAIK as a finalist project, I'd say that a study of the Linux is an excellent idea for a 3rd Year computer science Operating Systems course.

    I certainly wished I'd have had that opportunity :) because I had to study Op'S's without source. This was too theoretical; there should be room on a CS grad course for both theory and practice of such an important subject.

    Linux would be great for comparing the theoretical ideals against practical compromises, an area where CS grad's (including myself) are traditionally weak, and since the first step in doing a task properly is understanding, given a little time could pay dividends for Linux as well as the grad's.

  21. Try Minix :) by GaiJin78 · · Score: 1

    At our school we use the book "Operating Systems, Design and Implementation" by A.S. Tanenbaum, which discusses the basics of OSes, taking Minix as an example. Minix is a very narrowed Unix-like OS with the basic features in it, such as I/O, file system handling, threads, and more OS related things. An idea maybe?

  22. OS/2 is better... by ltning · · Score: 1

    ...for seeing the OS internals. The OS/2 kernel is built around all the best schoolbook examples there is, except perhaps for the scheduler which is far ahead of anything else.
    Besides, the device driver interface is quite easy to understand, and well documented, giving close relations to the kernel/hw at the same time as being logical and pretty straight-forward.

    Good luck!

    --
    Love over Gold.
    1. Re:OS/2 is better... by Anonymous Coward · · Score: 0

      Yes, I thick that OS/2 kernel and documentation is pretty good, but students must buy the OS, and its not shipping more.

  23. My Projects by sPaKr · · Score: 4

    At my school we are using Linux for our OS class now. We tweeked the RT scheduler , and added a new type instead of just FIFO, it was similuar, but did allowed jobs to be prioritezed before they started excuting. Starting with the proc entry was a good place to get going from. The device Driver was also a very good project. The device driver we impletmted was just a message queue. IE a /dev/msg entry where you would open the device, write some string, and it was stored in the kernel, Then reads on the device would return the messages in the same order. Good Project. For the final project we are working on a file system. They dont think we can code well enough so its all similuated in user space, but hey Im gunna wedge into the kernel cause thats just uber cool. I would also recomend groups of 2 students, try and give 1 - 2 weeks for each project, and then do the filesystem last, give 4 weeks, and make it kernel space.

    1. Re:My Projects by Yelskwah · · Score: 1

      Are you perchance at Stafford? This seems almost exactly what we had to do for OS years ago when I was a second year. Basically (without giving away what you're supposed to do) we had a version 1 linux lab and had to modify the scheduler so as to bias a certain profile of process. We were using version 1 because the rt scheduler was manageable then, I think in V2 it kind of started taking steroids and acquired all the SMP functions. Is Phil Cornes still at Staffs?

    2. Re:My Projects by Mike+Schiraldi · · Score: 1
      Here at Columbia, the OS course used to be taught using NachOS. This year, VMWare sponsored the course (i.e. gave us some 50-odd free licenses) so that we do all our work in VMs. We had some pretty cool assignments:
      • Add a pinfo() system call that returns parent pid, child pid, average cpu slice, etc
      • Add a new weighted-round-robin scheduler and use pinfo() to see how well it works
      • Implemented a new memory management policy
      • Modified the FS' block allocation policy
      • Added a new device, /dev/clock that lets anyone read and set the time (this caused some cool panicking when we set the clock back five minutes and the kernel noticed that some processes were "born" in the "future"
    3. Re:My Projects by Anonymous Coward · · Score: 0

      No ... Phil has moved on and is now freelance training for a living! Most of the old crowd at Staffs have moved on, you'd probably not recognise the place now. I think Phil is still actively monitoring the use of the A-Z book though, as it was designed primarily as a cross-over course text and general Linux internals overview. It was fun while it lasted ... some good years had by all (and some bl**dy dour ones!)

  24. Don't use linux by Anonymous Coward · · Score: 2

    Have you actually _looked_ at the kernel sources?

    It's quite unapproachable. Not because the things that are being done there are particularly complex, but it's all over the place and almost completely undocumented/uncommented.

    Sorry to say, but the lack of documentation and plain simple comments is caused by laziness, arrogance and selfishness. This will detract from the usefulness of Linux because people such as yourself will be driven away. It will reduce the size of the developer community and will _of course_ reduce the quality of the product.

    This will only get worse as it's going from a simple singly threaded model into a much more parallel design. There is NO SUBSTITUTE for carefully documenting your locking strategy. The designer's intentions cannot be practically reverse engineered from the source and without a clear understanding of the locking strategy the only people who can effectively maintain and grow it are the original authors, as long as they remember what they were thinking at the time.

    And who can we blame for this situation apart from he-who-waddles-on-water?

    - Anonymous Linux kernel developer.

    1. Re:Don't use linux by HeUnique · · Score: 1

      Well, thats true - many developers don't really comment what they write.. But if you want Linux kernel with comments, then check this at Amazon

      --
      Hetz (Heunique)
    2. Re:Don't use linux by MeanGene · · Score: 3

      Have you actually _looked_ at the kernel sources?

      It's quite unapproachable. Not because the things that are being done there are particularly complex, but it's all over the place and almost completely undocumented/uncommented.


      Great! Make the first assignment to write comments for some stable parts of the kernel - then submit patches to the tree! :)

    3. Re:Don't use linux by Periwinkle · · Score: 2

      Maybe what they need to do in thier class is write *Documentation* (gasp!!) for the Linux kernel. Or at least those parts that haven't made it into some book yet. The linux kernel is constantly under development, I'm sure there's always something new to document here and there. And it sure would be useful.

      -John
      I eat dog. Free DVDs. Horray!

    4. Re:Don't use linux by Yelskwah · · Score: 1

      You're right, but although I don't expect professionals to leave their code uncommented and undocumented, it still *is* that way in a lot of cases.

      Back where I worked last, the support organisation wouldn't accept code for maintenance until it had gone through at least one code review to check maintainability. If it wasn't maintainable, it went back to the developers until it *was*. There was an incentive for the devlopers to do it right first time as they didn't get grief from their managers for making the handover late and being over budget.

    5. Re:Don't use linux by Anonymous Coward · · Score: 0

      Yes, I have looked at the sources and managed to figure out enough stuff to make things work for me. There are a few drivers bearing my name in the currently distributed tree, and some other parts of the source carry fixes that I found. I'm self-taught in programming languages, having done C for about 3 years now. It's not THAT hard.

      What's the point of understanding the whole thing? Just understand the parts that you need to change in order to reach your goal. Anything else is just blatant dick size war fodder.

  25. NachOS... by mitch_wagner · · Score: 3

    During my last term I took Intro to Operating Systems we used a set of source code from berkely and washington called nachos. It basically emulates a MIPS 2000 platform. It is set up to have around 5 or 6 projects. Multithreading, File systems, Multi-processing, Memory Management and others. There are ports of the code for BDS, Linux, Solaris etc.... I suggest you go here for ideas. http://www.cs.washington.edu/homes/t om/nachos/

    1. Re:NachOS... by dirt · · Score: 1
      I'd like to second that. Currently I'm enrolled in an OS class using nachos (here at UW), and though many of us talk disparagingly about it (nobody likes grueling coding sessions under a deadline), I've found it well-designed and very flexible.

      The only caveat of a "fake" (i.e. simulated) OS is that you can make a number of cheats that you wouldn't ordinarily be able to do in a "real" OS (e.g. you don't really have to fully re-execute an instruction on a page fault within a syscall -- just fault it in and continue); also kernel data structures don't really exist in the simulated machine's physical memory. There are a lot of smaller issues too, like the use of C++, some people disagree with their coding style, etc.

      But really, that's not relevant to understanding the concepts and implementing them. The code that they give you is enough of a head start that you can actually learn relevant material rather than cutting hundreds of boring, potentially buggy, lines of code.

      ---

      --

      ---
      You are not what you own -- Fugazi, "Merchandise"
    2. Re:NachOS... by Anonymous Coward · · Score: 0

      I'll Third that. While NachOS runs on a simulated machine, it very nicely presents all of the OS Concepts for a modern operating systerm. Cheers!

    3. Re:NachOS... by Anonymous Coward · · Score: 1
      I'll... fourth(?) that

      I've also taken an operating systems course in my university. The course used nachos, and I think it was very educational.

      Anyways, you should get the Stallings book on OS'es, which includes a list of suggestions for OS course projects.

      Stallings, William: Operating Systems, 3rd ed., Prentice-Hall International 1997

    4. Re:NachOS... by jg253 · · Score: 1

      I've taken an OS course using NachOS and then took an Advanced OS course using Linux. I found that a big problem w/ NachOS (being a simulator) is that it was difficult to tell the difference between the hardware and the OS. You could go in there, and mess with the simulator to get around problems that a normal OS would have to deal with. This was a big problem. Also, the scope of NachOS is very limited, so that when you switch to a "real" OS like Linux you have to re-learn everything the right way... not always that much fun. Linux is well enouch documented, and the kernel is small enough (except for device drivers :)) that's it is a good OS to start with. Another interesting OS for research and education purposes is called FluxOS. It is a completely modular Operating System, which means you can take any component out and substitute one of your own w/ no dependencies (that's definitely not true of Linux). It is also meant as a reserach/education OS so it is very very very well documented. In 5-6 hours you can learn the basics well, and in a week you could be a FluxOS god. FluxOS uses components of other Open Source OSs such as Linux, FreeBSD, NetBSD, but it wraps them with code that makes them modular.
      Link to FluxOS project
      There's a link. The only big drawback is that you can't really benchmark with it (you can't do that with NachOS either) because it's non-standard.

    5. Re:NachOS... by Anonymous Coward · · Score: 0

      > I found that a big problem w/ NachOS (being a
      > simulator) is that it was difficult to tell the
      > difference between the hardware and the OS.

      The advantage of this is that you don't need to have workstations dedicated to the OS course projects. Since NachOS runs on a simulated processor, you can test, modify, recompile and "reboot" the system without affecting the physical workstation in any way. Doing an OS project using a system (such as Linux) which requires direct hardware access means that that workstation is completely useless for anything else (I personally wouldn't want to work on a workstation which I know to be unstable). This is a major drawback for most universities, where undergraduate access to computing resources is in high demand.

    6. Re:NachOS... by jg253 · · Score: 1

      That's why you run Linux from w/in VMware . That way you get the best out of a simulator, and a real OS.

      A couple of years ago, what you said was true, but I know a lot of school have switched to the VMware/Linux combo recently because it offers many advantages. I do believe that off the VMware site, somewhere, they have some links to schools that use their software (CU in NY for example).

    7. Re:NachOS... by tlhIngan · · Score: 1

      I am taking a course that utilizes both the NachOS "OS" and the Stallings book. I find NachOS perfect for introductory courses to operating systems - explain topics like multithreading, mutual exclusion (very tricky!), memory protection, cpu scheduling, etc. It's abstracted far enough from a "real" OS that you get the concepts down (and some basic implementation).

      As for telling the difference between simulated hardware and the kernel, I've found the simulated hardware is hidden away in the /machine directory (with explicit warnings to not touch code there), while the kernel is everywhere else.

      But, NachOS' scope as a teaching OS dies beyond the basics (definitions and a basic implementation with testcases). But, it is good at teaching the basics I've found, and explaining the basic functions of OS' (multi*, mutex, protected memory, etc) with some real implementation.

      Sure, if I want to expand that knowledge to Linux, FreeBSD, etc, I'd have to relearn it all, but it's easier to relearn implementation in a certain OS once one knows what is the basic premise.

  26. a few suggestions by dana · · Score: 4

    Here are some of the things I've enjoyed doing
    as school here at Concordia (the university in
    Montreal)

    Writing a simple shell with support for pipes
    and i/o redirection.

    Writing a simple server-client applications (some
    kind of echo or file transfer client)

    Writing a program to dump a file to stdout by
    reading the disk blocks directly.

    Writing a rudimentary undelete for ext2.

    Using semaphores to solve simple multi-thread
    problems (one writer-may readers, cars on a bridge
    etc)

    IMHO, a number of smaller projects is more useful
    than one large one because the students can find
    what they like and then can maybe expand on it later when they become open source contributors. :)

    Just look at any part of the system and ask "I
    wonder how that works" and voila, a project will
    hatch out of that slowly.

    Good luck!
    Dana

    1. Re:a few suggestions by TeknoDragon · · Score: 2

      MINIX MINIX MINIX! aka DIY Operating System

      Some of the core cirriculum here at <a href="http://www.eecs.wsu.edu">WSU</a> is Comp. Sci. <a href="http://www.eecs.wsu.edu/~cs360/">360</a> and <a href="http://www.eecs.wsu.edu/~cs460/">460</a>. As you can see from the web pages (check out "project specifications") you basically write a minix-liek OS here. In 360 you learn fundamentals of unix and get to code a shell, filesystem, and file management stuff. In 460 you do the rest of the fundamentals. When I took 360 last semester there wasn't any of this NT Visual Studios BS. Oh well, they move with the times and students here start using MS Dev Studio from 250 on... it's probably one of the few MS producs that I am satisfied with

      360 and 460 sound like the coures that somone posted down below about "here at CMU we... blah blah blah we're so great blah blahhhh..." but really you can probably get the same thing from any CS department in the top 25, so don't put yourself in too much debt getting there! [arrogant voice] here at *WSU* we use cheap ass Pentium class processors and learn x86 assembly, screw your commercial unix... practically all our labs run linux now[/arrogant voice]

      Dr. Wang kicks butt, so does Hagemeister, Rounds, and probably a few I haven't taken. There are some really tough proffs that teach theory too (one is my advisor). Who just about drive students MAD, but now that I'm getting up in the cirriculum to where I can start to consider going for my MS they really don't seem that bad... they just happen to be bad teachers and a bit too demanding for most people's tastes...

      check out the comp sci requirements <a href="http://www.eecs.wsu.edu/web_main/programs/pr ograms.html">here</a> if you're interested in any of the other classes and where they fit in.

    2. Re:a few suggestions by TeknoDragon · · Score: 1

      what part of "html extrans" does Slashdot not understand anymore?!?!?!

    3. Re:a few suggestions by Anonymous Coward · · Score: 0

      I also attend Washington State University and I'm currently taking the operating systems class (CS 460) that you mentioned. It is something of a trial by fire, but once you get through it you know understand the core of a multitasking OS really well. We use Minix 1.5 as our development environment (a stretch of the phrase) because it generates 16-bit real mode code. I am told that you can do the same thing in Linux without too much trouble. Our class projects involve building a multitasking kernel and extending it so that each process can execute its own user image. Our "OS" is booted off a floppy disk (using a boot program that we also write), so it truly exists independently of the development platform. I think that studying Linux is a great way to learn what an operating system should do, but the only way to really understand how an OS works is to build one from scratch. Writing device drivers teaches you a lot about hardware, but it is a systems programming task, not an OS task.

  27. Take one specific section and research it. by Durrik · · Score: 1

    Back in the days when I was a third year university student our professor had us look into either Linux or BSD for a specific section and research it.

    We then had to write a mini paper on how it worked and give a presentation to the class so that the rest of the class got a good look at how these other areas of the kernel worked.

    I only remember the following topics of the ones we were told to research:

    Inter Process Communications
    Device Independent I/O
    Task management (process switching)
    Memory Management (with swap space)
    File management (main filesystem)
    Device management (drivers for network, scsi, etc)

    There was a list of 20 or so topics, and a team of three could pick one of them for either Linux or BSD.

    I'm not sure what a class of college students will be able to do to help with kernel development. After all, your average college student isn't a kernel hacker, and you're not going to have an entire class be able to contribute. I'd say only a handful of the students in the class would have the ability, time, or the interest to contribute to the kernel, and that's not fair for the rest of the class who paid to learn the theory and the knowledge to develop the ability.

    Anyways when I took the class, Murry Goldberg at UBC was teaching it. Just look up CPSC 315 and 415 at UBC, he's usually open to questions.

    --
    Software Engineer & Writer of Military Science Fiction and Fantasy Blog: petermwright.com Twitter: WrightPeterM
  28. Re:real time linux ... maybe for grad students? by Sun+Tzu · · Score: 2

    Wouldn't Minix (or, perhaps, a very early Linux) be better for for most educational (kernel work) purposes? Linux is getting kinda large and, generally, that means that it gets harder and harder to extract the concepts from the code.

    I would think that a highly modular (read: totally unoptimized except for clarity) small kernel system would be vastly superior for most educational use. Note that I understand that, at the highest levels, there is no substitute for studying reality in all its complexity. But most of education involves building to that level and LInux is a big chunk.

    As for non-kernel work, which the questioner seems to be suggesting, I imagine Linux would be perfect. You would only need to look at particular pieces of code when your device driver behaves unexpectedly. That the code is there and royalty-free is a huge advantage. That the code is solid and well tested is priceless. ;)

  29. Just finished a course like this. by Anonymous Coward · · Score: 5

    I just finished a course like this. We used RedHat
    5.2 (with a nice, relatively simple 2.0.x kernel
    that reduced the learning curve a bit). We had two
    kernel programming assignments:

    1) Add process scheduling groups.
    We added a couple new system calls that allowed processes to create and then join new
    scheduling groups. You could set priorities for group member processes and then any time one
    member of the group came up, the highest priority TASK_RUNNING process in the group would
    be selected to run instead. This lead to pretty useless behaviour but didn't involve anything
    other than adding to the scheduler, so you didn't screw up the behaviour of non-group-member
    processes.

    2) Add a new in-RAM filesystem to the kernel.
    We had to add a 128K in-RAM volatile (your data disappears when you unmount the fs) filesystem to
    the kernel. This was nice because you didn't have to create any user-space tools (other than
    your own version of mount). When you mounted one of these filesystems the kernel allocated
    128K and created your filesystem on it. You could mount as many as you wanted and use them
    just like any chunk of disk space. This was a great way to learn the basics of Linux' rather
    cool VFS.

    Neither of these projects was hugely difficult but
    they weren't trivial either. We also had to write
    some basic kernel functionality benchmarks and
    compare Linux 2.0/Sparc (our systems) vs. some
    Solaris/UltraSparc systems. That was interesting
    as well. This was a great course, so long as you
    liked alot of programming.

    1. Re:Just finished a course like this. by jandrese · · Score: 2

      Frankly I'm amazed at the number of schools here that assign projects in kernel-land. I know the lab admins here would have a fit if someone assigned projects that required the students to not only have root access, but to mess around with the kernel.

      Here, when they teach OS, the first thing the students do is write an emulator for a system, then implement the various projects on top of it.

      --

      I read the internet for the articles.
    2. Re:Just finished a course like this. by Anonymous Coward · · Score: 0

      Actually, in this course the class was broken up into groups of three or four and we were the only
      ones who had root on our machine. They used old, old (and slow, slow) sparc boxes and we had a
      program that allowed you to access the box' console over a telnet connection. There was only
      one Solaris box that you could access the os lab machines from, and only certain accounts could
      connect to certain machines using this 'os-console' program. Basically only me and my
      partners could get console access to our machine. We could access the Sparc "OpenBoot PROM" via this
      'os-console' program which would let us hard re-boot the machine if needed, no matter the state
      of the os. The PROM always worked, so we were never completely screwed. We didn't even have physical
      access to the machines, but with this setup we didn't need it.

      The admins in our lab did a great job setting this whole thing up. But the key to this course was
      having the dedicated machines for each group, even if the were basically obsolete hardware.

    3. Re:Just finished a course like this. by hal313 · · Score: 1

      I am currently in a 300 level OS class. Our projects comprise of simulations of OS components such as file systems, memory management and process management. Though not specific to any platform or OS, we do have a SUN lab (but I still use Linux). The programs that we write comprise more or less of an emulated component. For instance, the file system we write resides in memory (unless I add a feature to write the memory contents to a hard file). The cool thing is that we get to design our own file system, adding the features that we like from real file systems. An advantage to emulating the file system is that it reduces the burden of me having to figure out how to physically write to the hard drive (and quite possibly break it). My file system project is due Tuesday, by the way, and I am not quite done ;-)

    4. Re:Just finished a course like this. by Duckie01 · · Score: 1

      I know the lab admins here would have a fit if someone assigned projects that required the students to not only have root access, but to mess around with the kernel.
      At our school, we have removable harddisks in the programming labs for that purpose. Every student or group of students working on an assignment has access to "his own" removable harddisk, stored in a lab closet.

      So what if someone has root access on his lab pc or screws up the kernel on his own harddisk? After every course, a filesystem image gets dumped on the harddisks to have a fresh base install :)
    5. Re:Just finished a course like this. by Anonymous Coward · · Score: 0

      I hate to say it so bluntly, but get_root_on_your_own_machine. 'Nuff said.

  30. Linux for Computer Science? by kd7ahv · · Score: 1

    I think using Linux would be a good use of student's time and effort. I am a Comp Sci/Electrical Engeneering major(s) and I know that if I was to be given a programming project, I would want it to be somthing that was useful. Device drivers, processor bug workarounds, hardware interaction fixes, anything to improve the way that the OS works. I personally would rather work on a class project that had lasting value, than one that was simply "do this, do that, file it away and work on what's next" I have too many of those already.

    --
    Vodka - It's not just for breakfast anymore!
  31. Princeton OS course by Mahy · · Score: 1

    I don't know any details, but I know our OS course uses Linux. I guess you could check the web page, here. Check under last semester's course listings.

  32. Project listing site. by rew · · Score: 1

    I would recommend setting up a site where users, professors, kernel developers and students can enter projects.

    Then you have to get people to enter projects in the database, which can be done by different types of students: Small assignment for an OS course: small projects. Graduating projects: larger projects.

    With a bit of hacking, jitterbug could handle this kind of job nicely. Professors wanting to "sort" requests to directories that they approve or disapprove for a certain assignment, can be given an account on jitterbug.... (The hacking is required to allow different professors to have different ratings for the projects)

    Roger.

    1. Re:Project listing site. by rew · · Score: 1
      Ok. Site is up!

      I'll do the "different professors get to classify projects into their own categories later on, if there is interest.

      Roger.

  33. A shell is a good start by sstrick · · Score: 1

    A uni we had to write a shell that supported programming structure and conditional statements. It also had to allow pipe commands, input and output redirection and wildcards.

    It was not to difficult but it was challenging enough for a then inexperienced prorammer to have to really think. It also leaves the person that wrote it with a very good idea of shell scripting and what you can do in it.

    --

    "Do you think we could wipe out world hunger forever if scientists figured out how to make AOL's Free CD's edible?"-
  34. Re:THE MODERATORS ON SLASHDOT ARE SMOKING CRACK by Chuck+Chunder · · Score: 1

    Oh yeah, there's thousands of operating systems listed on Freshmeat. In fact there's so many it's difficult to find user level apps there..........
    The 'on crack' moderators are the ones who mark the original post up after your protest....

    --
    Boffoonery - downloadable Comedy Benefit for Bletchley Park
  35. Linux curriculum by Anonymous Coward · · Score: 0

    Our operating system module in the University of Limerick deals exclusively with Linux. Last year we wrote simple programs that worked with semaphores, threads and forks... a good way to become familiar with the workings of the kernel and linux, but nothing spectacular I suppose. They'd certainly give a 'feel for the OS internals' though.

  36. comment from a 3rd year CS student by rongen · · Score: 1

    Hi, I'm a 3rd year CS student. I think an OS class (especially an intro class) should focus more on IPC, mutual exclusion, and exploring different models for partitioning user and kernel space, etc. While Linux rocks, there doesn't seem to be any reason to focus on it specifically. All OS designs should be looked at, contrasted, and critiqued. CS students need to learn general principles (that is one reason why you take CS instead of attending a "career college").

    Also, when it comes to programming assignments, it might be good to encourage slightly portable code. Maybe making sure your application compiles on both Linux AND Solaris (or whatever you are using). This can be a good experience. I can think of a few times where execvp or whatever behaved differently on these two systems and kept me up late learning why (I looked everywhere but that function to figure out why my program was hanging on Solaris and running fine on Linux).

    --

    --8<--
  37. Re:THE MODERATORS ON SLASHDOT ARE SMOKING CRACK by Anonymous Coward · · Score: 0

    Its defenetly off-topic. The topic is operation system development, not open-source-project-improvement-that-has-nothing-t o-do-with-os-besides-using-system-calls

  38. Why limit the project to Linux? by mhunter · · Score: 1
    There are three kinds of operating systems courses: those that teach no practical applications at all (useless), those that teach some useful fragments without providing a broad overall view, and those which force the student to implement an entire, useable operating system by the end of the course.


    Clearly Linux is only really relevent to the second type. If you want to learn about OSes properly, as in a structured set of assignments, you're better off doing the whole thing yourself, rather than focusing on one piece you are actually implementing and leaving the rest in the realm of theory.


    Doing "something serious and new" with the Linux kernel makes a great MS or Phd thesis, however.

  39. A course at Yale by PrimeEnd · · Score: 1
    A course at Yale does something quite close to what you are describing. They use Linux as the programing environment, but produce a baby standalone operating system. It looks very interesting.

    Take a look here.

    1. Re:A course at Yale by Anonymous Coward · · Score: 0

      Actually. The professor isn't teaching OS this year. This was last year :)

      This year, we're working in nachos. Class homepage

  40. Oh. You wanna *start* w/an OS? by aheitner · · Score: 4

    in the Carnegie Mellon operating systems course (mostly taken by juniors/seniors, tho it isn't specifically a "3rd year" course), you don't start with any operating system.

    The course is taught on SPARC emulators, which run on (you guessed it) SPARCs and make the architecture a bit more manageable. But you write the operating system ... that's kind of the point :)

    It's not all that complex an operating system, nice and straightforward and unix-ish, but it's a hell of a lot for one semester. The course is done in project groups, and it has a reputation as about the hardest class out there.

    I've had friends in the course get back after a week almost exlusively in the lab. They show up friday afternoon in a zombie like state...
    --"What did you write this week in OS?"
    --"Huh? Oh, inter-process data streams. You know, pipes"
    --"Neat"
    --"pipe pipe pipe! pipe! PIPE! PIPE!" [nervous sobs]

    1. Re:Oh. You wanna *start* w/an OS? by ralphclark · · Score: 3

      That's what I like to see. If the students aren't crying, they're not working hard enough! I'm mostly serious about this; between 1985-1995 there was a steady and continual deterioration in the quality of CS graduates (I've not done any recruiting since then so I can't speak for the last 5 years). And those graduates don't half get a shock when they enter the world of work and see just what level of effort and skill is expected of them. It benefits no-one to dumb down Computer Science courses.

      <blockquote>Cram it in, jam it in
      The students heads are hollow.
      Cram it in, jam it in:
      There's plenty more to follow</blockquote>

      Consciousness is not what it thinks it is
      Thought exists only as an abstraction

    2. Re:Oh. You wanna *start* w/an OS? by britt · · Score: 2

      Ah yes, Harvard's OS course is like this as well. Average assignment is about 50+ hours of coding a week...

      Page Fault TWITCH Spawn TWITCH MIPS assembly TWITCH

      There's nothing like spending 15+ hour stretches in the lab looking for that one Heisenbug in your VM system...

      --
      --Britt
    3. Re:Oh. You wanna *start* w/an OS? by coondog · · Score: 4

      I would agree that OS at CMU is a killer course. However, I do think that it is incredibly beneficial to have completed the projects that are in the course: a simple shell, a tty driver (that uses mutual exclusion to make sure multiple writes / reads are not interleaved), a simple kernel (context switching, virtual memory mapping, IPC, semaphores, fork, exec, etc), and a simple file system.

      I do think that any CS major who has a chance to take such a course should take it. It provides you with an amazing amount of experience for one semester.

      You can check out the course web page at http://www.cs.cmu.edu/~412/.

    4. Re:Oh. You wanna *start* w/an OS? by Muad · · Score: 1

      I seem to ermember that students at Stellenbisch University, near Cape Town, do build their own OS during the second year - but they do that under Oberon. Still, it is a remarkable achievemnt....

      In my university, Boston College, it depends on the professor teaching the course. I know a professor used to require teaking Minix, but the current trend seems to be writing a scheduler for Linux, although the problem is not really tackled at system level.

      BTW: our CS lab is 60% RedHat Linux, 40% WinnNT.

      --
      --- "I didn't think anyone would understand it" -Prof. Bob Muller
    5. Re:Oh. You wanna *start* w/an OS? by six11 · · Score: 1

      I worked on a project with a guy a couple semesters ago who was graduating. He did exactly zero work for the project, and even missed the final presentation because he was busy at Sun getting interviewed. I was a better programmer/computer scientist than this guy was when I was a freshman, and sun hired him. That really made me optimistic about the future, knowing what sort of morons I was, um, competing with.

    6. Re:Oh. You wanna *start* w/an OS? by froody · · Score: 1

      I was gonna post this but you beat me to it. Just wanna say that I completely agree. As someone who took OS at CMU (copy-on-write fork, yeah!) I can say that it _really_ taught me how stuff works under the hood. You can't code it unless you really know what's going on. If you don't think your students can hack it (and if they're not coding at least 20 hours a week then they can do more >:->) have 'em write a scheduler/program loader from scratch. I think the from scratch part is important because it teaches you the only real magic that goes on in an OS: how it takes control from other programs.

    7. Re:Oh. You wanna *start* w/an OS? by ElitistWhiner · · Score: 2

      The greatest lessons I learned in CS circa 1974 were the weeks spent in the lab writing code through the night. This would go on without any indication we'd have something to hand-in that was running on Friday.

      Courseware was given out on levels. If you couldn't get level1 grokked step down to an easier level2 assignment. By Friday there would be only a couple of us left grinding level1.

      The lesson was that level1 while requiring more knowledge, was the easier assignment if you understood the problem. It demonstrated the power of abstraction and using the right tools for the job.

      I went back to an Ivy League CS program to brush-up mid90's when I had some time. I was shocked curruculum changes had reduced a CS education to assignments out of the back of the book. All the challenge and creativity seemed sucked out of the program. Profs. admitted that they had sold out and were churning out C++ programmers for Industry.

      It saddened me that these kids couldn't get the rush of knowledge acquisition and insight from the challenge of creating their own solutions. There was only the back of the book problem set and one possible solution set.

      More than cram it into their skulls, challenge the curriculum with innovative problem sets that students can bring their own intelligence to the solution. If there exists only one possible solution set... there is no incentive to experiment and challenge their intellect.

    8. Re:Oh. You wanna *start* w/an OS? by Capt+Dan · · Score: 5

      I took the CMU OS course as a junior all those many years ago... And I must say that it was quite possibly the most educational CS course I have taken.

      As aheitner posted above, it runs using specialized emulatorsm not to make the architecture more manageable, but as a sandbox or virutal machine for the OS you are writing.

      When I took OS, there were 3 projects:
      1) write a basic priority based scheduler. Time: 2 weeks, solo project.
      2) Write a kernel. Time: 6 weeks, solo project. In reality it took three weeks of constant coding. We implemented ISR's, memory management, fork, exec, wait, sleep, read, write, malloc, and another 10 basic OS functions I cannot remember. I wrote a kernel.
      3) Complete Filesystem. Time: 4 weeks, with a partner. We wrote a complete filesystem

      The projects varied depending on who the professor was for that semester. The other semesters projects were all partner oriented which allowed them the time to do things like terminals/shells and kernel threads.

      I do not understand why people are looking for projects that tweak the OS itself, or add to it. I learned so much about OS and about myself and my abilities by having a 6 page project spec dumped in my lap and being told "here ya go. Have fun. You have the TA's office hours."

      It's like learning to drive a car. Sure there's a manual that you can study, and you can sit in the drivers seat for a while and play with the blinkers and the wind sheild wipers while going "vroom! vroom!" but unless you have someone force you to learn to drive, you'll never know how good your skills really are.

      Talking about advanced capabilites in an OS course is all well and good, but save it for grad courses. An undergrad course should be about the kernel and basic resource management.


      "You want to kiss the sky? Better learn how to kneel." - U2

      --
      Sig:
      Barbeque is a noun. Not a verb.
    9. Re:Oh. You wanna *start* w/an OS? by Anonymous Coward · · Score: 0

      Totally agree with you on this... I am taking this course right now, we have to do a Shell, Terminal Driver, Kernel, and Filesystem. I would like to mention another course at CMU, Embedded Systems, which basically teaches almost exactly all the concepts taught in OS. Except you get to work with *RAW* hardware, yes, hardware with no OS... add your own OS! :) This course is actually in the ECE curriculum, and not part of CS, but it's still relevant, and I think any system programmers should look into it.

    10. Re:Oh. You wanna *start* w/an OS? by Capt+Dan · · Score: 1

      unless of course you plan an entire year around getting all of the prereq's for embedded systems just to find out the professor had a hissy fit one day becuase he didn't get tenure and canceled the course...

      Sigh. At least one of my degrees is worth something...


      "You want to kiss the sky? Better learn how to kneel." - U2

      --
      Sig:
      Barbeque is a noun. Not a verb.
    11. Re:Oh. You wanna *start* w/an OS? by wik · · Score: 2
      Not to mention the fact that the embedded course is A LOT of fun (at least when my project demos actually work!). This semester the final project may or may not happen, but in previous years it consisted of writing code to record from a QuickCam and microphone in real-time on a small ARM7-based system and playback the video/audio streams later. Not a trivial task.

      Right now we're coding up Tron on a terminal to get the basics of concurrency. This is the stuff that I grew up wanting to do when I was a young stupid kid with an IBM PC. The cool thing about this class is if you get really mad at something, there's a physical board that you can kick. Not that I'd ever do that... :)

      --
      / \
      \ / ASCII ribbon campaign for peace
      x
      / \
    12. Re:Oh. You wanna *start* w/an OS? by ralphclark · · Score: 2

      I certainly sympathize with that. Even when you have a lengthy resume behind you, and even when you're being interviewed by a manager with some technical ability, the criteria by which the final selection is made often seems to go more by chicken guts and the phases of the moon than anything *real*. That guy must simply have an interviewing style that was suited to the interviewer.

      BTW, watch out for programming syntax tests. I've been to numerous interviews that could only be passed if were able to parse the most hideous abortions of C syntax in your head under pressure. The fact that no sane person would ever write such a statement or declaration is neither here nor there, it seems they just want walking talking K&R books. Programming style? Irrelevant. Readability? Who cares. Ability to map a problem to a solution? Not important.

      And they wonder why so many software projects fail...

      IMO if you're confronted with this sort of thing during an interview it's best just to politely decline and leave...unless you'd enjoy working for a clueless project manager alongside a horde of incompetent spaghetti coders.

      Consciousness is not what it thinks it is
      Thought exists only as an abstraction

    13. Re:Oh. You wanna *start* w/an OS? by civilizedINTENSITY · · Score: 1

      ah but most entry-level positions start with code maintence...not project management. hence the syntax filter.

    14. Re:Oh. You wanna *start* w/an OS? by civilizedINTENSITY · · Score: 1

      which is exactly why other sciences have trouble with the CS degree. it doesn't really seem like science. now Computational Chemistry (or Physics or Applied Math) is a science degree. if what they (the prof.s who you say admit they've "sold out") want is to produce programmers for industry they should call it by another name...perhaps a votech degree.

    15. Re:Oh. You wanna *start* w/an OS? by ardu · · Score: 1

      I do not understand why people are looking for projects that tweak the OS itself, or add to it

      To find a job at Microsoft perhaps?

    16. Re:Oh. You wanna *start* w/an OS? by ralphclark · · Score: 2

      Ah, but the sad thing is that I'm not just talking about interviews for junior positions but those for contract programming roles earning £100K per year. Most programming roles are maintenance roles, but most maintenance doesn't just entail one-line changes, there's still a degree of design involved. And even a one-line change can be fscked up.

      Consciousness is not what it thinks it is
      Thought exists only as an abstraction

    17. Re:Oh. You wanna *start* w/an OS? by Chris+Pimlott · · Score: 1
      BTW, watch out for programming syntax tests. I've been to numerous interviews that could only be passed if were able to parse the most hideous abortions of C syntax in your head under pressure. The fact that no sane person would ever write such a statement or declaration is neither here nor there, it seems they just want walking talking K&R books.


      Perhaps it's a sign - "If you can't parse this piece of shit code, you won't be able to come close to understanding our product's source"
  41. my os course.... by j1mmy · · Score: 1

    The OS course I took last quarter mostly had us writing programs to simulate OS operations. We worked with the pthread library to get a better understanding of processes and thread, wrote scheduling simulators to build on that, and did a few things under NT like developing a cmd-like shell.

    This quarter we basically just progressively built a filesystem driver for FAT12, but it didn't really relate to the lecture material and took far too much time for most students.

    I suggest you stay away from actual kernel hacking, at least until later in the course. Simulations are less dangerous to the system, especially when the students are coding in an area they have little to no experience with. As per my second point, make sure the assignments are relevant and not too long.

  42. Unix can also be used by Lothar · · Score: 1

    I know this is off topix but it is obvious that both Unix and Linux is good for teaching Operating Systems.

    Writing a simple device driver is one of the assignments which could be given to the students. Maybe one could have groupwork and look into creating a simple kernel module for Linux.

    The problem is to get the staff to avoid underemestimate the students. When I was taking the class "Operating Systems 2" at Strathclyde Uni(Glasgow - Scotland) , what we used was Sun workstations and we only had to use pipes, multiple processes, threads etc...patethic :(. It was all very simple and nobody taught us anything about the kernel.

  43. Some Thoughts ... by trexl · · Score: 1
    Some time ago, I took my CS Operating Systems class and there was an accompanying lab. The two were disjointed (I really didn't like it, but both courses became easy A's). The course proper dealt with theory, just like the post a few back. Mutex and protected memory, spin locks and dining philosophers ... The lab consisted of attempting to do very basic OS type operations, but used NT. Since there were'nt enough NT boxes in the lab, some of us that worked were forced to "BUY NT"(the horror, not so much NT, but BUYING IT). I told the professor that I didn't have the means to do so and to his credit he accepted linux/unix versions of equivalent projects for the NT assignments. I attempted the NT, but found that for even an NT fork() there were about 10 parameters to be passed. Most were for the GUI and could be eliminated, but there were about 3 that weren't. I was completely confused. fork() doesn't need parameters.

    What I learned from this approach is that operating systems should be taught at both levels, theoretical and practical. The theory and practice should coincide, and that OS theory has little to do with window placement, border sizes, and adding these things only confuses students. I guess the final thought in all of this is that it is best for an OS class to use an OS based on the theory that it teaches, *nix, Linux, a BSD or derivative so that the theory blends best with the practical. Using a Free OS just makes it easier on the students, especially those that can't make it to the lab all day because they work.

    1. Re:Some Thoughts ... by be-fan · · Score: 2

      Actually, don't critisize NT for having fork() take parameters. NT was designed for threading from the ground up, and fork() and some of the other POSIX stuff doesn't mesh to well with it. Its a problem in general for systems that aren't POSIX at the core, I know BeOS really doesn't like forks() and once you use one, you lock yourself out from using BeOS threads.

      --
      A deep unwavering belief is a sure sign you're missing something...
  44. Redo existing stuff. by stripes · · Score: 2

    At the University of Maryland we wrote an extreamly primitave OS (no filesystem, no memory protection, but it had a text mode windowing system!). We did it from the raw hardware, so it was pretty damm chalanging. You learn a lot of things that way (like how to really write intrrupt handlers, not how to use someone else's framework!).

    I think there is a lot of merit in that approch. It was the only class at UofM where we touched bare metal (the assembly class was close though). I think it is important that CS students do that at least once.

    I also think students could benifit from doing larger things to an existing OS. But as a diffrent class. I would focus not on things Linux needs, but things the students could learn from. Like putting in a fixed-priority scheduler, and then testing for priority inversion, and finding a way to fix that. Maybe adding a batch scheduler. Writing a driver for a simple piece of hardware (like the serial port). Maybe something slighlty more complex, like something that DMAs. Maybe an IDE controler driver. Sound cards would be better then IDE controlers, except that would be a pain in a lab enviroment, and the hardware changes from year to year.

    I know none of this would directly benifit the Linux comunity, but it would greatly benifit the students. Remember it is easyer to grade a project with a known outcome then something open ended! It is also easyer for the TAs to advise students on smaller projects with known results. The students will gain some first hand knolage of formerly abstract concepts, and some knolage of Linux internals.

  45. POSIX utilities by Anonymous Coward · · Score: 0

    such as POSIX message queues, could be a good idea. Involves scheduling, virtual address remapping between processes, etc.

  46. Reading Kernel source code; Filesystem by jlrobins_uncc · · Score: 5

    When I taught our (UNC-Charlotte's CSCI) graduate operating systems course, assmuming that the students had already received an undergraduate OS course (sadly, sometimes too hopeful of an assumption) which covered the core basics of memory management, process management, context swtching, and introduces the two-layer device driver approach (our undergraduate course uses the XINU book), I picked up where that course left off, covering more about device drivers, I/O descriptors and their interaction with system calls, the filesystem (on-disk implementations, kernel implementations, different implementations at different mountpoints), then finishing off with distributed systems. One large component of the course was reading the Linux kernel source code in order to see a "real world" implementation of the coding concepts discussed in class. I have aways been a critic of how too many CSCI courses focus solely upon writing projects, yet don't spend enough (or any) time having the students read non-trivial code. We wouldn't ask novelists-in-training, essayists-in-training, or poets-in-training to write more than we've asked them to read, would we?

    Anyway, two series of projects accompanied the lectures and assigned code readings. The first was to design and implement a basic interactive shell, first with basic file redirection and piping, later adding redirection to TCP sockets. This project aimed at giving the students a taste of systems programming that they may not have otherwise received, plus hammering in the UNIX concept that read() / write() will work on any sort of descriptor, be it pipe, file, or socket; even without the knowledge / cooperation of the process doing the I/O. At the time of writing the projects, the students were to read though the kernel code which implements the major system calls that they were using in order to see what was really going on (or at least to get a general idea that it all wasn't magic -- it all boiled down to "C" source code somewhere).

    The second project suite was the implementation of an inode-based filesystem, starting from the ground up. First write a simulated mini-SCSI bus that supported two types of devices (one with 512-byte sectors, the other with 4096-byte sectors, just to ward off assumptions at the inode/block management layer). Once that works, add an inode manager that can use one of the virtual SCSI disks. Lastly, add a directory services module on top of the inode manager, so that we can manipulate files, directories, and symbolic links.

    Ultimately, the projects asked a good deal from the students, as that the majority of them had not written any multi-threaded OO systems that made use of message passing (over the SCSI "bus"), so not only did they get to simulate some kernel components, they also had to come up to speed with some relatively advanced programming designs. The folks who used C++ learned the hard way that (at the time) debugger support for multithreaded programs was, um, challenged. Folks who wrote in Java had a bit of an easier time. Depending upon the level of knowledge in your undergraduates, I would not recommend the filesystem project. The shell project, OTOH, would be applicable to either 3'rd/4'th year undergraduates or graduate students, as that it hits home on the core UNIX datastructure -- the I/O descriptor. If the students were to have root access to the boxes, then I would have them perhaps extend an existing kernel subsystem or to write a new driver given an existing one. What about a thorough examination of the Linux scheduler / context switching algorithm. Could they cut any fat from it, as the IBM JDK folks did? What about examining the timer system? What about implementing a new "toy" virtual device driver, such as /dev/random (not that it is a toy, but that it doesn't correspond to any single piece of hardware, per se), such as a simple message passing port? One process opens it up, writes to it, then closes, followed by another process opening it and reading from it. That would demonstrate upper-layer device driver interfaces, plus the issue of passing bulk data to/from user space, and why time spent memcpy'ing becomes a factor in I/O bound systems.

    Oh yeah, one other thing. You might want to think about obtaining the source code for more than one OS kernel (say also a *BSD kernel or the Solaris kernel -- being at an institution of higher learning, you should be able to get the Solaris source code w/o charge) in order to have the students compare / constrast the different approaches taken.

    Have fun with the course!

  47. Distributed computing architecture by Yelskwah · · Score: 1

    I should probably add that as finalists on the Distributed Computing Course we were tasked with building a load-balancing system which would take a process and run it accross the system, returning results when the process ended. I think I solved it by having a daemon run on each box which would serve the box load and accept incoming processes. A master daemon would take new processes, find the lowest-loaded box and send them off. The process itself was linked against a library of functions, one of which organised for the process to be moved to the least-loaded box. The problem was the process had to be network-aware. Moving arbitrary user-space processes requires various kernel structures be unhooked and moved too (not within the project scope). It worked pretty well; it was nice (in a geeky way) to have the lab to onesself occasionaly and to hear the process migrating around the room (disk activity gave it away). When the process ended, the distribution daemon on whatever box it was one would send its output back to the master. I'm a little hazy, there may have been more daemons involved and I don't want to dig out my coursework (I promised the psychologist never to look at it again :)

    1. Re:Distributed computing architecture by Anonymous Coward · · Score: 0

      Another one that might have "academic" interest. ;>

      On a full-year programming project course, we implemented a completely distributed operating system emulator (==unix process in this case), which featured such nifty things as scheme as application development language, lispy bytecode virtual machine, totally transparent interdomain process migration, domain freezing and melting, capability-based security model, and, as it was *very* much built around concept of co-operating "agents" (fancy name for a communicating process), good communication facilities.

      Some of demo applications were shell, simple windowing system, process viewer, web server (implemented using TCP/IP implementation in "external agent"), totally distributed game of life, and such.

      Implementing the system certainly required lot of work, but was also lot of fun. I'm looking forward to such systems in "real" setting.

      And yes, how many OSes you have used can do this: give an process environment (==single unix machine, for example) on a system where computation adapts dynamically to several different computing nodes based on different hardware architectures?

  48. Linux? Nah, start simpler. by britt · · Score: 3

    In my OS class (and at other schools like UC Berkeley, Duke, and Harvard) we used a package called NachOS. It runs on a MIPS emulator, and you write large chunks of the OS yourself. We had to write processes, system calls, filesystems, VM, schedulers, applications for the OS (the shell was just 5% of assignment 2). The final assignment is to write a couple different schedulers or other subsystem, then performance analyize the hell out of it, which was really interesting.

    Granted this course has a reputation for being WICKED hard. The whole OS is multi-threaded etc etc, so you have to deal with all the fun race condition issues just like a real OS. Running on a simulator makes life much better for a couple of reasons. 1) crash/rebuild/restart/debug cycle is MUCH FASTER. 2) debugging real kernels w/o having two machines (for serial debugging) is not fun, plus you've got to have the machines for the students, which can be a pain. 3) come on, device drivers aren't the _interesting_ part of the OS, so using a system where thats already done is more useful.

    I liked doing this better than what other people here have suggested. I think just writing a device driver is kinda silly. It's a reasonably straight forward project, not really a good thing to do in an OS course, having students working with all the important OS components is much more useful. Starting with Linux is not a very good idea because of the large code base, and from what I've seen it's not really the best code for students to read. I would recommend one of the BSDs if you really want to go with the whole OS paradigm, especially FreeBSD when McKusick comes out with "The Design and Implementation of the FreeBSD Operating System." A second OS course or a Graduate level one is a better place to have students dive into a real OS, at that point you know the background theoretics of OS work, and you've written a fairly large code base of your own. Then it becomes much easier for students to dive into a real OS and do some research.

    For books I'd say the Tanebaum book (already mentioned here) and the 4.4BSD book are very good.

    --
    --Britt
    1. Re:Linux? Nah, start simpler. by Anonymous Coward · · Score: 0

      I must agree.

      NachOS is pretty good as a simple introductory system. Certainly it leaves out some "real" stuff, like kernel memory allocation, and has its strangenesses, but I doubt if there's a better solution around.

      When it comes to more advanced OS topics, I'm fan of systems not continuously evolving. You can interpret this as "use BSD, there are many open variants to choose from, lots of academic OS-related research is made with it, and it has documentation too!" ;)

    2. Re:Linux? Nah, start simpler. by britt · · Score: 1

      Yes, the lack of kernel memory allocation is the single major problem with NachOS. Yes, i need a new kernel data structure, ok 'New...' Some friends of mine will say there are some evil heisenbugs in their code as well, but I don't believe them :). Oh and a couple of really obscure MIPS emulation issues, which I was too lazy to fix.

      But yes, NachOS to start, and BSD after that is a very good route in my opinion (some would say OSF1 based on the number of papers that have been published from it as well, though you have to wonder about all those CMU, and MIT people ;)

      --
      --Britt
  49. Learn fundamentals by drnomad · · Score: 1
    In my computer science class we typically did some small projects on producer/consumer problems. If I were you (or your proffessor) I wouldn't pick an open source project for teaching.

    You will be working with existing code from guys who have absolutely more experience than you (like you said, you're not really masters of programming). It will take an awfull lot of time to get into the code and understand how it works.

    When I was at college, they tought me the basic principles. Well it is an OS-course, so learn OS-things. I worked with Unix/Minix and some other stuff, but you could use Linux.

    Try this book for fundamental problems with producer/consumer problems, semaphores and dining philosefers problems: "Operating System Concepts" by A. Silberschatz, J. Peterson and P. Galvin (ISBN 0-201-55793-2 or ISBN 0-201-54873-9)

    This is a good book for teaching. In my RedHat installation, there were several pthread examples which demonstrate consumer/producer situations, why don't you try it with processes instead of threads, then you must work with that awfull 'fork' command, something very common to Operating Systems (not MS-DOS! ;-) ).

    Have fun!

  50. NACHOS is a fantastic learning OS by raygundan · · Score: 1

    We are using NACHOS at Purdue University, and it beats the pants off of starting with something as complex and "finished" as Linux. NACHOS is a simple OS that is designed to allow students to implement VM, Scheduling, Mutual Exclusion, Filesystems, etc... It is easy enough to undertand that we just dove right in and started coding, rather than working on little isolated examples first. I highly recommend it.

    1. Re:NACHOS is a fantastic learning OS by UberThread · · Score: 1

      I agree -- here at the University of Michigan, we are using a slightly modified version of Nachos. At first glance,it is rather complex and confusing. However, it's **nothing** compared to Linux; my partners and I have peeked at the source code for Linux for reference. Although Nachos has given me countless days/nights of anxiety, I [grudgingly] admit that it provides students a "nice" way to implement fundumental OS concepts such as interrupts, [preemtive] scheduling, synchonization (with both semaphores and monitors), priorities, system calls, exception-handling, file systems, etc.

  51. CS Curriculum... by AlexZander · · Score: 1

    I am a CS Student at WPI and as a requirement for EVERY CS class I've taken but one, the program's are all targeted for Unix / Linux. My Operating Systems professor spent a long time talking about linux in the course, which I found fascinating!

  52. Use solaris by StanSmith · · Score: 1
    Computer Science studies at the university level are still not focused enough towards helping the student find a job afterwards. Well, neither are any other sort of studies at a university, but CS has less of an exuse in my opinion.

    I have a close friend who graduated with a CS degree, and knows nothing of Unix. I constantly find myself glancing sidelong at him, asking 'what exactly the fuck did they teach you at that college?'.

    Teach on Solaris. Businesses use it, and you'll be doing your students a favor. Linux is fun, and free. If your students have the love, they'll go home and teach Linux to themselves.

    1. Re:Use solaris by be-fan · · Score: 2

      You do realize that learning UNIX is not essential to having a CS degree. People can be master programmers without ever having touched UNIX. There are many reasons, but the main ones are...
      A) Everyone uses Windows. Face it, a deep knowledge of Win32 is much more usefull than a deep knowledge of UNIX in the commercial application world.
      B) The Win32 is easier to learn and has more coherent resources. Sure the UNIX APIs have much more documentation, but the books put out by MS give a pretty good overview of the entire API.
      C) CS degrees can also be in algorithms and programming techniques. In that case it doesn't matter what OS one uses, becuase most calls will be standard C or C++ library calls.
      D) CS degrees can also be in computer graphics, in that case windows is the best OS to use because it has the best hardware support for graphics APIs. And if your programming so low level that you're not using OpenGL or something of the sort, then your probably using DOS.
      Just because many people use it in the CS field doesn't mean its the only way to go. DOS is probably the best for beginning level CS courses, and for application design, BeOS is probably best because its API is so easy to use. For scientific and other hardcore stuff, UNIX is probably the way to go.

      --
      A deep unwavering belief is a sure sign you're missing something...
    2. Re:Use solaris by lamj · · Score: 1

      University is just different from what you are thinking of.
      When we say study database, we do not actually get to study a lot of real world stuff, but the theory and concept behind it, like normalization, crash recovery, concurrency control.
      When studying OS, we do not actually study how to use a OS, how to admin an OS. But the concepts and theory of how OS in general works. CPU scheduling, deadlocks, memory management, concurrent processes are taught in my school (York University)

      There is just no courses at my University that teaches the usage or admin of an OS. This is not what university is for, but college.

    3. Re:Use solaris by JohnZed · · Score: 2

      Computer Science studies at the university level are still not focused enough towards helping the student find a job afterwards.

      Thank God! If you leave college with a strong background in programming and theory (even if you mostly just know C/C++ and Linux or Unix), I mean, one that covers theory of large-scale programming, OSes, and especially algorithms, you'll have a long-term base that will last you even if we all end up progamming in some bizarre, currently-unknown lagnuage on 3-dimensional displays running on BeOS 9.12.

      Why? Because, if you know your stuff, you can always pick up a couple of books or take a quick training class (cost: $100 - $2000 ) to learn the newest industry trend. But if you don't learn the theoretical, university-style fundamentals, you will most likely never learn them, and go through the rest of your life as a fairly mediocre programmer.

      In particular, it's scary that I've met people who graduated with nothing more than a series of "Programming in X, level Y" classes. A friend of mine intereviewed someone who came from a curriculum like that, and asked him to write "strlen()". The applicant (a VB programmer) thought about it, then proceeded to write a program that repeatedly split a given string in half until it ended up with only one character, then counted the number of splits it took. Wow.

      You can learn "skills" any time. Use your university time to learn theory, if you want ot get your money's worth!
      --JRZ

    4. Re:Use solaris by Anonymous Coward · · Score: 0

      Computer Science is not about learning a specific platform or product. It is more about learning theory and algorithms. DFAs, NFAs, and Turing machines will always be around, but Java could be gone tomorrow.

    5. Re:Use solaris by mav[LAG] · · Score: 1
      People can be master programmers without ever having touched UNIX. There are many reasons, but the main ones are...
      A) Everyone uses Windows. Face it, a deep knowledge of Win32 is much more usefull than a deep knowledge of UNIX in the commercial application world.

      My experience says otherwise. I know patch-installing, MS Dev subscribing, hands-on Windows MCSE/MCSD gurus who can definitely be said to have a deep knowledge of Win32. But that's it. Win32. One set of APIs. The Microsoft-centric way of doing things. "Click on these wizards here and it will do it all for you" kind of programming. Of course when it comes to having to digging down to the bones to find out what is going on - perhaps to solve a difficult problem - they're clueless. They don't have the source to the OS so they can only make educated guesses at best as to what might be going on. B) The Win32 is easier to learn and has more coherent resources. Sure the UNIX APIs have much more documentation, but the books put out by MS give a pretty good overview of the entire API. Ever wondered why there aren't any books titled "Undocumented Linux" or "Debian Secrets - What the Developers haven't told you"? These kind of books are two a penny for Windows precisely because the API is not properly documented or overviewed anywhere (except possible Petzold). Windows application development at a low level is all about workarounds and waiting for the next patches to Visual C. At a high level it's all about clicking buttons and following instructions.

      C) CS degrees can also be in algorithms and programming techniques. In that case it doesn't matter what OS one uses, becuase most calls will be standard C or C++ library calls. If you're learning programming and all you're doing is making library calls, you're learning squat. A decent course on algorithms and programming techniques needs a couple of things:

      • A decent environment
      • Development tools that a) work b) are real-world and c) don't cost a fortune

      D) CS degrees can also be in computer graphics, in that case windows is the best OS to use because it has the best hardware support for graphics APIs. And if your programming so low level that you're not using OpenGL or something of the sort, then your probably using DOS. Just because many people use it in the CS field doesn't mean its the only way to go. DOS is probably the best for beginning level CS courses, and for application design, BeOS is probably best because its API is so easy to use. For scientific and other hardcore stuff, UNIX is probably the way to go.

      --
      --- Hot Shot City is particularly good.
    6. Re:Use solaris by be-fan · · Score: 2

      >>>>>>>>>>>>
      My experience says otherwise. I know patch-installing, MS Dev subscribing, hands-on Windows MCSE/MCSD gurus who can definitely be said to have a deep knowledge of Win32. But that's it. Win32. One set of APIs. The Microsoft-centric way of doing things. "Click on these wizards here and it will do it all for you" kind of programming. Of course when it comes to having to digging down to the bones to find out what is going on - perhaps to solve a difficult problem - they're clueless. They don't have the source to the OS so they can only make educated guesses at best as to what might be going on. >>>>>>>>>>
      Thats a pretty sad group of programmers then. The problem is that you believe that sterotype that all Win32 programmers use app wizards. Some do, mainly hobbyists, but I know that in circles of serious programmers, even using something like MFC is frowned upon. Most can dig down into the roots to find a difficult problem. The 3D studio MAX guys could probably whip 99% of the Mesa or KGI guys when it came to graphics code. If you're talking about less serious programmers (like most Linux programmers are) then yes, maybe they do use MFC and app wizards. Windows is a fundementally different paradigm from UNIX, especially Linux. Most apps that ones uses in Linux are made by people who do it on the side. On Linux these people have to use the low level code, but on Windows they'd probably use app wizards. On windows however, you're mostly running apps from major developers, who hate MFC and app wizards.
      Second, I never said that windows was properly documented. For the course of a few years of college training however, you're not going to need anything more than Petzold's books and some books and algorithms. Sure there are a bunch of undocumented things, but there their mainly because your not supposed to use them. You can't critisize MS's documentation guys. DirectDraw alone has 600 pages of documentation in a word file. As for not having source code so one can learn about the inner workings in solving a problem, all I can say, is that you shouldn't need to. First, programmers have been getting along fine for decades without the source to the OS. Second, if you need the source to understand whats going on, then the API is badly designed, and the documentation is inadequate. Third, its people who look at the source to take advantage of the system who are the root of all the legacy crap today's OSs have to carry. As for CS degrees in algorithms,
      A) Windows is friendlier and more familier to work with
      B) VisualC++ is $99 for educational purposes. My high school has hundreds of licenses for it. Whats so expensive about it?

      --
      A deep unwavering belief is a sure sign you're missing something...
    7. Re:Use solaris by mav[LAG] · · Score: 1
      Thats a pretty sad group of programmers then. The problem is that you believe that sterotype that all Win32 programmers use app wizards. Some do, mainly hobbyists, but I know that in circles of serious programmers, even using something like MFC is frowned upon. Most can dig down into the roots to find a difficult problem.

      True - the point I was making that depth of knowledge of Win32 seems to produce programmers with less ability or willingness to dig a little deeper. Again, this is only my experience but it is based on constant contact with a wide range of commercial developers across both platforms. BTW I don't believe the stereotype because I used to be a Win32 programmer and rarely used Wizards.

      Second, I never said that windows was properly documented. For the course of a few years of college training however, you're not going to need anything more than Petzold's books and some books and algorithms. Sure there are a bunch of undocumented things, but there their mainly because your not supposed to use them. You can't critisize MS's documentation guys. DirectDraw alone has 600 pages of documentation in a word file.

      I see your point but I still think there's a big difference between a CS course that uses Windows as a teaching course and one that uses Linux. If its basic algorithms and some stuff on data structures et al, then fine. WIndows + VC is more than adequate. But a CS course over "a few years of college training" to use your words would IMO be much richer using something like Linux. Want to teach how the OS works? Virtual memory? Paging? Swapping? Scheduling? Check out the code. Dig around. Write your own. Make it better. Really understand why things happen when they happen and how they were designed that way. Interestingly enough Vinod Vallopillil, the Microsoft engineer who authored the Halloween documents describes his experience with fiddling around with Linux in similar terms.

      I used to have the same argument may years ago with my friends who said ASM was a waste of time. My reasoning was that to really know what's going on at the hardware level, you should know some assembler. I still believe that knowledge makes you a better programmer - even today. In fact, especially today.
      So yeah sure, take this copy of Windows and VC and after a few years you'll be a great programmer? Shudder. Maybe I'm just biased - but then I've worked extensively in both...

      As for CS degrees in algorithms, A) Windows is friendlier and more familier to work with If you call crashing all the time friendly - something which happened to me often as a newbie Windows developer. And as for the familiar argument, I know what my daughters will grow up using :)

      B) VisualC++ is $99 for educational purposes. My high school has hundreds of licenses for it. Whats so expensive about it?

      It's frigging expensive where I live - even for students. Besides, hundreds of licenses * 99$ is a bit more money than hundreds of free installtions of RedHat.

      --
      --- Hot Shot City is particularly good.
  53. One word: NACHOS .... by opencode · · Score: 1

    Stands for Not Another Completely Hueristic Operating System ....

    It's essentially a bare-bones OS skeleton, that is highly-customizeable, in the sense that every student in a class of 25 will write different algorithms ....

    There's a standardized "four-phase" curriculum used world-wide, and each phase has 8-12 projects (most are more design-oriented than code writing) ... fun stuff ...

    Sure, it's used pretty heavily in graduate OS studies; but who's to say younger students can't "analyze" the system calls, file systems, and virtual memory constructions ...

    http://www.cs.duke.EDU/~narten/110/nachos/main/m ain.html

    --
    "He who questions training trains himself at asking questions." - The Sphinx, Mystery Men (1999)
  54. Hacking some OS can be good for students to know by stoev · · Score: 1

    Implement/append/make better some of these.

    http://www.infowar.co.uk/thc/files/thc/LKM_HACKI NG.html

    http://www.infowar.co.uk/thc/files/thc/slkm-1.0. html

    http://www.infowar.co.uk/thc/files/thc/bsdkern.h tml

    http://www.infowar.co.uk/thc/files/thc/anonymous -unix.html

    Note: This IS very important for people in CS. This is the real life and advanced stuff in the same time. CS will need to understand this in the future.

  55. Re:Don't use linux - good point by *borktheork* · · Score: 1

    After reading the Tanenbaum book, I decided to tweak some things in the kernel (just for the hell of it) - this became a long-term project to actually understand the code. Comments? We don't need no stinkin' comments! - Well, actually there are a few comments, mostly dating back to pre 1.0 versions...

    --
    *borkborkbork*
  56. BSD by howardjp · · Score: 3

    No, really! Even though I am not well versed in kernel design, just flipping through the FreeBSD kernel code will teach you quite a bit about how the system works at a user level. The Design and Implementation of the 4.4BSD Operating System is an excellent resource to have handy when learning to program at the user level in Unix. If you use it, you will have a far greater understanding of how the kernel and libraries are handling the calls you make and you will quickly understand programming more.

  57. Class Material by HerbieTMac · · Score: 1
    I TA'd an OS class for professional-level students last year called Operating Systems. We used the Tannenbaum & Woodhull text "Operating Systems: Design and Implementation." Students were asked to use Linux for their programming OS and I used RH for my examples. The main programming assignments for this course were:
    • Write a pipe program to redirect output from one program to input for another. (i.e. pipe program1 \| program2)
    • Write a program to share a memory page between two processes created with the fork() system call.
    • Using semaphors, write a program to solve the dining philosophers problem.

    This was a 10 week course. Most of the programming was used merely to augument the topics covered in the reading and lectures. Additionally, each student was required to turn in a final project consisting of either a functional program which added value to the operating system (and was released under GPL) or a final paper describing the functionality of one of the 5 main parts of an OS.
  58. Take a look at ELKS by sdaemon · · Score: 1

    Take a look at ELKS, the Embeddable Linux Kernel Subset, aka Linux-8086. Its an attempt to port a subset of linux to the 16-bit processors of the 8086 family. The kernel is small enough to be understandable by developers who haven't been with the project since day 1.

  59. It's being done already here.. by Pizza · · Score: 1

    Here at Georgia Tech They're experimenting with such a concept in a Junior-level OS class.
    CS3210 I was almost involved with the course but I ended up having way too stuff on my plate aleready this semester. Alas, as the course looks extremely interesting.

    Anyway, check it out!

    - Pizza

    --
    -- I ain't broke, but I'm badly bent.
  60. Serial Drivers by DrStrange · · Score: 1

    From what I have found, writing a serial driver from scratch is about the easiest device driver to write. It also can be written using a polling or interrupt based method so you'll get experience with both. Anything more complex would probably take more time to write from scratch than it would be worth in a class.

  61. WSU by maz! · · Score: 1
    At Washington State University, a combination of MINIX and Linux is used for the operating system class. You may start something out on Linux, move it to MINIX where you make it work for your OWN operating system. That is, you boot your OS from floppy.

    MINIX is used because it is easier to write an OS in it.

    --
    - mAZ!
  62. here's exactly what you want by mikek · · Score: 1

    Here at Columbia there is a course exactly like that where they study operating systems and all the programming projects involve modifying a linux kernel. The book even discusses linux as one of its case studies. The book is:
    Operating System Concepts, 5th edition, Abraham Silberschatz and Peter Baer Galvin, Addison Wesley,Reading, MA, 1998.
    You can check out the course website at http://www.cs.columbia.edu/~w4118/. Just so you know I haven't taken the course yet. I'm taking it next semester, but I knew about it through friends and the professor. I hope this is useful.

  63. Re:My Projects (Good Books To Teach With/From) by Carnage4Life · · Score: 3

    Linux Kernel Internals 2e Beck, Bohme, Dziadzka, Kunitz, Magnus, Verworner Addison-Wesley 1998 480 pages ISBN 0-201-33143-8

    Linux Device Drivers Rubini O'Reilly 1998 421 pages ISBN 1-56592-292-1

    Linux Core Kernel Commentary Maxwell Coriolis Press 1999 575 pages ISBN 1-57610-469-9

    Applied Operating System Concepts 1e Silberschatz, Galvin, Gagne Wiley 2000 840 pages ISBN 0-471-36508-4

  64. Ten projects for your OS class. by Black+Parrot · · Score: 1

    Well, OK, I can only think of five right now. Someone help me out here.

    5) Integrate your favorite browser into the OS.

    4) Detect and warn if DR-DOS is present.

    3) Add theme support for BSODs.

    2) Provide a back door for UCITA remote disables.

    1) Hide the NSA key.

    p.s. - We need an HTML tag for reverse-numbered lists!
    --

    --
    Sheesh, evil *and* a jerk. -- Jade
  65. Linux OS assignments by Anonymous Coward · · Score: 0

    At York U (Toronto) we used Linux for our 4th year OS design course and some of the assignments included:

    * Modifying the scheduler so that processes can subscribe/unsubscribe to/from groups (via system calls). Once in these groups, they were scheduled using the policy inherited from the group amongst themselves (either FIFO or Priority). Also once a group no longer had processes subscribed to it, it had to be removed.

    * Write kernel benchmarks to test various things like context switch time, block copy, select system call, file open/close etc. This was to test scalability of an OS in accordance to hardware using an old Sparc using Linux and a new Ultra Sparc with Solaris (Linux kicked ass!)

    * Write a filesystem that is similar to Solaris' tmpfs (that is using only memory and not disk access) for Linux.

    We got to work in groups of 3. This course was hell but you learn a lot.

  66. Minix would be "better" for a 13 week course by Anonymous Coward · · Score: 1

    HI, Having gone through such a course myself in the past two years, I can say that Tanenbaum's Operating Systems paired with it's minix cd (version 2) is an excellent way to go. There are versions for the PC, Sparc, and one that will run ontop of Solaris (Very nice if your're messing with the scheduler .....) Projects we did included: writing ps for minix writing top for minix re-writing the process scheduler to be priority level based The key point about minix/the book is that their scope is just about perfect for the time given; not to broad, not to little and enough similarities to Linux to get people interested for your new grad level course

  67. Similar course at University of Alberta by Anonymous Coward · · Score: 0

    The University of Alberta in Edmonton, Canada has been offering a course like this for 4 or 5 years.

    This year's course home page:
    http://www.cs.ualberta.ca/~yannis/485_00_winter.ht ml

    Last year's:
    http://www.cs.ualberta.ca/~pawel/COURSES/485/cmput 485.html

  68. Understanding the timer interrupt by Anonymous Coward · · Score: 0

    If you really want to understand how Linux does its thing, you first have to understand what happens during the timer interrupt. Once you've got that down everything else can begin to fall into place. MAF

  69. Something involving concurrency .... by taniwha · · Score: 2
    Make sure there' something involving interrupts, timing holes/windows, multiple CPUS etc etc

    My experience has been that the thing that programmers find hardest about kernel work is learning how to think about how things interact in time - ie non-sequentially - I spent 5 years unix kernel hacking for a living and even for the really experienced people I worked with this was something they had to think hard at to get right - it never seemed to become they just understood intuitively. Now after 10 years as a chip designer it's become 2nd nature.

    Also make sure there's something to do with cache coherency - learning where the right places are to flush the cache (and not to do it too often) when 2 concurrent things are communicating (a dma controller with a driver for example) - this is something that requires a good detailed understanding of the hardware that's underlying the system

  70. Nachos by akiaki007 · · Score: 1
    I am currently taking an OS programming class and we're using a very simple broke down OS created JUST for this purpose by UC Berkely.

    Nachos prior to your modifications is a very very simple OS. Originally you start with the threads section and modify their code in order to show problems with Concurrent Programming. Then you show the proper way to do programming and create Semaphore, Locks, and Condtion variables, and your own special Synchronization Primitive. After which we program a Building with N Elevators with N people. This is half the semester, and I don't remember what we're doing after this, but we went as far as creating our own memory/process manager/allocator.

    This is quite a fast paced and intense class. Difficult...yes...worth it, I'm sure.

    --
    "Time is long and life is short, so begin to live while you still can." -EV
  71. Stay away from drivers by gelfling · · Score: 1

    In the real world it's the bottom of the food chain and you are tied to a specific vendor.

  72. write a simple shell! by Anonymous Coward · · Score: 0

    I am currently taking an OS course, with a major emphasis on Linux! One of our projects was to write a simple shell with I/O redirection, forking of processes, and pipes. While I am still not an expert Linux programmer, it did help introduce me to many useful system calls! In the near future, I hope to be contributing some quality software to the Open Source movement! - Gene Ruebsamen

    1. Re:write a simple shell! by ttyRazor · · Score: 1

      I did something very similar for my Unix class last semester. I agree, writing your own shell is a great opportunity to familiarize students with the nature of I/O and processes in *nix. It's a good bridge between the system level stuff and the user interface, and gave me a much better understanding of how processes actually get run.

  73. linux schminux by Anonymous Coward · · Score: 1

    the course is about OS theory not "linux" linux is an example of an OS, just like microsoft windows, and you have no business 'pushing' linux into a class just because you like linux any more than microsoft has any business 'pushing' profs to use microsoft.

  74. simulators are for wussies by Anonymous Coward · · Score: 0

    we wrote our own damn hardware simulator then we wrote an OS for it!

  75. Minix! (sp?) by Hynman · · Score: 1

    Our book came with the source code to minix. I asked my OS Prof about linux and he said it was too complicated for a 14 week course. Looking at the source though, minix looks ideal for this kinda course.

  76. here at carengie mellon, we lick our own ass by Anonymous Coward · · Score: 0

    we are so smart that we are dead tired
    were smarter than you and we are dead tired
    dont forget we worked harder than you
    because were smarter than you and well get hired
    and youll get fired
    and im dead
    dead fucking tired
    because i bork bork bokr bork i am a night who says knee
    and my friend will correct me and say its spelled ni
    and im dead tired and im smarter than you and im gonna get hired

    1. Re:here at carengie mellon, we lick our own ass by Anonymous Coward · · Score: 0

      and were smarter than you and were faster than you and we got more brains and we worked harder than you and were smarter than you and we smell less than you and were better than you and we got more important things to do than sit around talking about life with you and were gonna get famous and publish a paper and gonna be on the television paper and were gonna get jobs and make lots of money and were gonna go fast and get alot of cool toys and gonna go down the mountain and make noise and were gonna leave you in our dusty tracks and were gonna cure cancer and were gonna fight fat and were gonna leave it all by the side of the road because were gonna make a cute little plastic toy and were gonna have friends that we flush down the toilet and were gonna make friends who like to treat us bad and were gonna get drunk because we just cant stand it and were gonna fall down all over ourselves and well get back up because were powerful grrls and were gonna fight back and fast and long and hard and were gonna be stars and were gonna go far and were gonna be stable and have homes over our heads and food to eat and wine and cheese and bread and whores and maybe a stripper or two on our birthday and were gonna fight the flu, and when im all grown up ill pay for the best stuff when im all grown up im gonna pay for the best stuff gonna pay for the best stuff that my best taste desires gonna pay for my models and cars and bicycle tires and i love to talk about theory and facts and i got a funny way of looking at hats and ill share it with you if you allow me to and ill share it with the world because i got nothing better to do im gonna be an intellectual prima donna so dont forget my autograph

  77. My experience... by Malc · · Score: 2

    Andrew Tanenbaum: Modern Operating Systems, Prentice-Hall.

    This is a very good book for introductory Operating Systems.

    I learnt one of my programming strengths from Tanebaum's book: multi-processing/threading (experience in the real world has lead me to believe most people have no clue when it comes to programming concurrent code). After taking an OS course, people should be able to describe a solution to the Dining Philosopher's problem (I used to ask about this when conducting interviews of potential new hires, explaining it for those who weren't familiar with it - I was shocked by how many people couldn't deal with it). Every program I right these days has concurrency issues. My course taught this through a thread package that abstracted threads to their base concepts without getting into operating system specific implementation details (it incidentally ran on Linux). Getting bogged down with an operating system's implementation details just causes confusion in an introductory course, making it more difficult to learn the base concepts.

    The last project of the course was a bit more specific, and involved writing a mini-shell for Linux, with some of the c-shell functionality (commandline parsing, sychronous and asynch program execution, etc). But by then we were familiar enough with the concepts that we ready to try doing it for real (although a lot people were still able to bring down the Linux boxes by eating up the process table).

    My advice: work though Tanenbaum's book, which will explain the most important OS concepts: stressing fundamental issues in design, process management, memory management, synchronization, interprocess communication,, file systems, shared resource management, etc. Then on the practical side, base the assignments on concurrent programming. This takes time to learn, it's best/only learnt through experience, and is a critical concept to understand.

  78. device driver writing from Belgium by g1t>>v · · Score: 1

    Here at the university of Ghent, Belgium, there's a course in Operating Systems that involves doing stuff with CDROM-device drivers, a parallel port LED driver device, etc ... it's at http://www.elis.rug.ac.be/~kdb/best/ but presumably unfortunately most of it is in Dutch :-S

  79. CS Curriculum at New Mexico Tech by rathstar · · Score: 1
    Hi, I'm about to graduate with a CS degree from New Mexico Tech, and every course I have taken so far has used linux (and C) for a backdrop. In Systems Programming, a second-year course, we had many projects:
    1) Write a program to generate a recursive directory pit. Find out why it stops after a while and what you need to do to remove it after you make it.
    2) Write an application to multiply matrices. the catch: the matrices will be stored in a file on a different computer. You have to use a client/server model to get the information.
    3) rewrite cat, using both a block-structured approach and a character-structured approach. See by how much one is faster than the other.
    4) write a simple shell. Your shell should at least be able to take commands, but once you have that done, add more features like I/O redirection, filename completion, etc.

    The kind of material is not very suited to an OS course, just because it isn't about interacting with the OS. However, it is useful for students that haven't had a hands-on course in OS-specific programming. Anyway, besides other linux-based projects for other classes (writing an ADA-CS compiler for LinuxPPC among the more interesting,) we also have an OS class that is very interactive with the Linux Kernel. It's a third-year course, but I'm taking it now. Here are some of the projects I have encountered so far:
    1) (starting easy) Become familiar with Linux by installing it on a machine, and then download some kernel source from www.kernel.org, and reconfigure and recompile the kernel.
    2) make your own system call. What's involved here is learning how to pass user information to the kernel, and how to set up your system call in the linux kernel (with include/asm/unistd.h and (for us) arch/i386/kernel/entry.S).
    3) Implement your own scheduling algorithm. Incorporate it into the Linux kernel by writing a system call to allow the superuser to switch between the default scheduler and the one you wrote. Then, using lmbench, compare the performance benchmarks of your scheduler with that of the builtin Linux scheduler. The more complicated the algorithm, the more points it may be worth (so implementing a lottery-based scheduling algorithm is worth more than a simple least-first algorithm)
    4) Something involving cooperative user-space threads (we haven't gotten that far in class yet; the assignment has only been hinted at.)

    In all of these projects a major emphasis was that the kernel must not crash under any circumstances (otherwise we might as well do windows programming.) So we had to check all kinds of possible dangerous situations (somebody passes a null buffer for the kernel to store information in, etc.) Also, for these projects, we are allowed to work in groups of up to 4 people. While the coding itself does not lend itself directly to group work, the brainstorming is definitely helped along (four heads are usually better than one.)

    For more information about our operating systems course, check out www.cs.nmt.edu/~cs325.

    kudos on trying to include linux in the standard CS curriculum.

    (rathstar)

  80. My experience/advice... by Malc · · Score: 2

    Andrew Tanenbaum: Modern Operating Systems, Prentice-Hall.

    This is a very good book for introductory Operating Systems.

    I learnt one of my programming strengths from Tanebaum's book: multi-processing/threading (experience in the real world has lead me to believe most people have no clue when it comes to programming concurrent code). After taking an OS course, people should be able to describe a solution to the Dining Philosopher's problem (I used to ask about this when conducting interviews of potential new hires, explaining it for those who weren't familiar with it - I was shocked by how many people couldn't deal with it). Every program I write these days seems to have concurrency issues. My course taught this through a thread package that abstracted threads to their base concepts without getting into operating system specific implementation details (it incidentally ran on Linux). Getting bogged down with an operating system's implementation details just causes confusion in an introductory course, making it more difficult to learn the base concepts.

    The last project of the course was a bit more specific, and involved writing a mini-shell for Linux, with some of the c-shell functionality (commandline parsing, sychronous and asynch program execution, etc). But by then we were familiar enough with the concepts that we ready to try doing it for real (although a lot people were still able to bring down the Linux boxes by eating up the process table).

    My advice: work through Tanenbaum's book, which will explain the most important OS concepts: stressing fundamental issues in design, process management, memory management, synchronization, interprocess communication,, file systems, shared resource management, etc. Then on the practical side, base the assignments on concurrent programming. This takes time to learn, it's best/only learnt through experience, and is a critical concept to understand.

    Follow this link for the thread package that I learnt from (Carleton University, Ottawa, course 95.300). It runs in Linux, it's light-weight, it's simple, it helps with learning the concepts.

  81. DAMMIT! I WASNT READY TO POST by Malc · · Score: 1

    Please ignore or moderate down the parent article that this is attached to. I wasn't ready to post, and I've posted the final version later! Submit, preview, easy to get confused :(

  82. Where can i learn this without taking classes? by krogoth · · Score: 1

    Is there any tutorials or something to learn these things without taking classes? I know Windows programming, but i would like to learn Linux application and kernel programming.

    --

    They that quote Benjamin Franklin on liberty and safety deserve neither.
  83. Why only in college? by Rares+Marian · · Score: 2

    Given the Debian team is mostly in their mid teens, they're perfectly capable to learn this stuff.

    --
    The message on the other side of this sig is false.
  84. Complicated OS. . . by JohnZed · · Score: 2

    Hmm... I'd have mixed feelings about using Linux for this sort of class, because I'm a big fan of hands-on learning. And, if you think about it, writing a device driver isn't much like designing a whole OS.
    Around here, our OpSys class uses the Tannenbaum book (which includes lots of samples from Minix, a simpler OS that was designed for teaching purposes). In small groups, students then implement most of the major OS subsystems (memory management, file system, boot loader, etc), while being given code for some of the more dull things (i.e., the shell, although I did just have to write a job control shell for another theoretically-second-semester class and it was a boring $%!#%). The cool thing is that, at the end of the semester, you have a floppy disk with your own primitive OS on it.
    --JRZ

  85. UC Riverside's Program by Anonymous Coward · · Score: 0

    Check out http://www.cs.ucr.edu/~sshah/cs163
    for their assignment list from 1999.

  86. I suggest by Anonymous Coward · · Score: 0

    I suggest them making a journaling file system for Linux... the more the merrier ;-)

  87. Check back issues of Linux Journal by Anonymous Coward · · Score: 0

    Past issues have included articles about writing a simple device driver and an embedded systems education project.

  88. Microprocessor Systems @ Toronto by stras · · Score: 1
    The Microprocessor Systems course ( ECE 385) at the University of Toronto uses Linux as the base OS. Although this isn't an OS course per se -- it's a hardware course -- students still write device drivers that talk to ISA cards that they build. More details can be found at the course and lab web-pages.

    As for security (students requiring root on the boxes and all), we handled this by putting all the boxes behind a switch and requiring the use of ssh for all communications. Students caught doing anything stupid (like DoS attacks) can get expelled; FWIW, we didn't catch any.

  89. CSCI and Linux by pissoncutler · · Score: 1

    My school recently revamped the OS class using linux. We are using 'Operating Systems: a modern perspective' (2nd edition) by Gary Nutt. It includes several "Lab Sections"(homework) which involve programming in Linux. Assignments include writing a shell, a file manager, and parsing /proc files.
    I recommend it.

  90. The way i am doing it ... by Rasha · · Score: 1

    At MIT there is a class offered mainly for juniors called Computer Sytems Engineering (6.033 fo those who care). This class focuses on the design of co puter sytems from OS'es to networks. Along with this class one can opt to take an additional lab. This lab is only worth 6 Units (at MIT that's about half an average class) but supposedly takes as much time as two classes. The projects start with implementing a timer mechanism for an asynchronous I/O library. Thi i to get us used to system calls and different I/O methods. The second is a simple TCP proxy that must use the I/O library we developed. After that we must implement an HTTP proxy that does caching. The third and final project is a team effort to write an NFS implementation. All this can be developed on either Solaris or Linux and is tested on a Linux machine (I think).

  91. An Excellent Opportunity for Linux by Anonymous Coward · · Score: 0

    Linux has an excellent opportunity in the Education area.

    Like Minix before it, it serves the role admirably. It's an "Ensigns Training Ship" type operating system, and gives the lower-level undergrads a tremendous opportunity to see how quaint old Operating Systems from old tymes operate. Then when they get into their upper division classes, they can 'graduate' to the real world. Few will ever look back.

  92. Why linux isn't being used for RTP and QNX is by Anonymous Coward · · Score: 0

    In my realtime programming class we use QNX instead of unix because QNX is actually used in the field and linux is not. eg, QNX runs some of the traffic light and medical systems.

    1. Re:Why linux isn't being used for RTP and QNX is by Anonymous Coward · · Score: 0

      Not so - we're using RTL here (in industry) as
      a C-based prototyping environment for our
      later to-be-embedded assembly code.

    2. Re:Why linux isn't being used for RTP and QNX is by Anonymous Coward · · Score: 0

      In my realtime programming class we use QNX instead of unix because QNX is actually used in the field and linux is not. eg, QNX runs some of the traffic light and medical systems.

      Well in my *job* we use QNX4.2X *and* linux... QNX also runs a lot more than just some traffic light and medical systems... in a good(just my rough guesstimate) 70% of serious relatime apps your gonna find QNX2/QNX4.2X somewhere down there.

  93. try vsta! by Anonymous Coward · · Score: 0

    Ok, so it's not linux, but:

    VSTa is a simple GPLed microkernel, based on plan9 and qnx. Its primary strength from a class perspective is that it is very simple, very easy to grasp (small), but is still quite capable (it's a "real", if underdeveloped, OS). And what's more, it really needs more developers---it's been basically stagnating for quite a while now, which is a shame, since, if it were mature and had a more complete posix implementation, I'd love to replace linux with it. For all those people who thought plan9 was pretty cool but too bad it's a proprietary Bell Labs thing: try VSTa!!

  94. Class on Linux kernel internals by Xeger · · Score: 1

    Here at UCSB, there is a student-taught course called Linux Kernel Hacking, which familiarizes students with the kernel, kernel data structures and the workings of the kernel. The assignments are things like: use advanced features of the OS such as shared memory and IPC, write a device driver for a simple homebrewed device, etc.

  95. What about the HURD? by kzin · · Score: 2

    Linux is pretty much finished now, so finding new things to do can be
    either hard or give you a feeling that you're not doing "real
    work". But what about GNU HURD? It's a work in progress right now,
    needs a lot of help, and is a microkernel, which is a much more modern
    design. How about contributing?

    - Adi Stav

  96. Weenix by Anonymous Coward · · Score: 1
    Recommend Brown University's OS course

    the OS you write is called Weenix, and is quite decent for the term.

    If for nothing else, go for the highly legible course lecture slides.

  97. 3rd Year Op Sys Class at my University by nord1899 · · Score: 1

    At Virginia Tech, we have a 3rd year Operating Systems class. The class deals more with what an operating system is and does than anything else. The major project in the class requires the students to write a program simulating an operating system that has job scheduling, process scheduling, deadlock avoidance (banker's algorithm), and memory management. Granted nothing actually runs inside these programs as they are simulations, but they give students a good idea as to what the operating system actually does.

    Heres a link to the course description:
    http://www.vt.edu/vt99/academics/ugcat/ucdCS.html
    and heres a link to the class web page:
    http://courses.cs.vt.edu/~cs3204/spring2000/henry/

    Hope this helps.

  98. What UC Berkeley Does... by bifrost · · Score: 2

    Currently, they teach a lot of computer theory with BSD based systems. A lot of the campus infrastructure runs with FreeBSD, and the fact that the CSRG was started there and Kirk McKusic teaches there sorta helps that along. Reviewing FreeBSD kernel code is easy because its clean, fast, and it makes sense. I've read through a few other Kernels and none of them made as much sense as the FreeBSD kernel did, maybe it shows bias, but I know quite a few people who feel that way.
    Every time I read through Linux source, I have to grep to find things, its pretty imposing.

    1. Re:What UC Berkeley Does... by BlueMonkey · · Score: 1

      I took CS162 (operating systems) at UC Berkeley. I was lucky enough to take it in the 1 magic semester that Brian Harvey (aka bh) taught it. Normally, 162 is taught with Nachos (the toy OS). But in this one semester, bh decided to go with FreeBSD.

      We basically did the standard Nachos projects in the FreeBSD kernel. We used the 4.4 BSD OS book by McKusick as a reference. My memory fades, but we had about 4-5 projects in the semester. One was to implement a lottery scheduler in the kernel. Another had something to do with VM. There was a filesystems project, and I can't remember the rest (this was a few years ago).

      Well anyway, I remember that while we all spent a lot more time on the projects than people who took it in the Nachos semesters, most of us felt like we were real kernel hackers because we went through a real kernel's source code and changed it and were running a real kernel that we changed. It was a great feeling (yes, it grew chest hairs for me).

      But there were problems with using FreeBSD instead of NachOS which is why 162 was never taught with FreeBSD again. Firstly, Nachos runs under existing OS's, kinda like a user program. With FreeBSD (remember, this was before VMWare) each project group had to have a machine all to themselves. We had to compile a kernel on our machine and reboot the machine and on occasion, go through the kernel debugger to find out what broke. This led to several problems. We didn't have enough machines to support a class of around 100 students. Also, the sysadmins were squeamish about letting students hack up their own kernels (and have root) on machines connected to the campus network. So we only had 10-15 machines isolated from the network. Most of us used our own machines at home, which helped to ease the load on the school machines.
      Another problem was that this was a lot more work than a typical CS162 class. Also, while a lot of different people took the class, only 2 kinds of people left the class - the ones who knew what was going on and were really happy with the experience, and the ones who didn't know much unix and were even more confused by the projects than they were going into the class.

      The second problem wasn't a fault of the course instructors though. They did their best (which was pretty damn good IMHO) and they did away with the grading curve which then allowed students to help each other.

      So if you do plan on using FreeBSD or Linux for your OS class, look into the issue of computing resources, network access, VMWare, course load, etc.

  99. Re:real time linux ... maybe for grad students? by Zurk · · Score: 2

    not really. linux may be large but all the drivers are really small. complexity is great to learn from and its not that hard. it took me two weeks to write a barebones driver. i'd recommend a fairly simple project that illustrates some important concepts for this sort of thing. maybe a small kernel based timer to drive an external application of some sort, a small filesystem driver, a small network driver for a crude serial port network device or something similar. the palmpilot is a great help to hook up via the serial ports or a small serial terminal with a small microprocessor which can be programmed to simulate various simple system concepts and/or hardware interfaces.

  100. schools and linux by the+virus+master · · Score: 1

    i am setting up a computer club at my school and
    want to learn about servers, if anyone knows of a good tutorial on that subject or one on firewalls
    post a reply to this post about them

  101. Well, here is what we are doing.... by Anonymous Coward · · Score: 0
    I'm currently taking a Operatings System class taught under linux. This is the first semester the teacher has taught the class under linux, so we are all kinda learning this together. Our first program was a simple one to get us all used to programming under linux. Our first program was a recreation of the linux hexdump program (with some little modifications). It introduced us to taking arguments from the command line and then incorporating those into the code. Part of the requirment is that if we didn't specify a filename, it would take input in from the keyboard. Another part is that if the output got redirected, we also had to print it on the local terminal also.

    The second lab was to simply examine some code from the book and get an understanding for it. The code was related to processes (execl, and other related functions).

    Now we are at the next project where we are going to write a program which acts as an alarm clock. This is going to be our program which acquaints us with processes. The spec. calls for us to write a program which will sound an alarm and depending on the key on the keyboard that is pressed, either the alarm will shut off, or perform a snooze. When the snooze is performed, this is done with a child process. The duration of the snooze and time until the alarm goes off are both given in the command line when the program is run.

    So that kinda takes you up to where we are now. The instructor is doing a good job of not giving us little programs that are meaningless, instead we get a program that incorporates the various things he wants us to learn. I also know that at some point in the semester we are going to be writing some device drivers, and we are also going to be playing with interrupts for IO devices. But that is in the future.

    Also worth mentioning is that the instructor is also having us present our projects to the class rather than simply turn them in. This way, he can make sure we understand the code, and can explain to other people what exactly we are doing in the program.....Rather than just submitting a project we don't really understand but can get to work.

  102. "Nachos" ToyOS by Anonymous Coward · · Score: 0

    i'm taking an OS course this semester, and we are using something called "nachos" toyOS. it runs on Unix, but i think there are ports of it for Linux, but i'm not sure. it was originally developed at Berkeley (or Duke?? not sure...) anyway, here's a URL to it: http://www.cs.duke.edu/~narten/110/nachos/main/mai n.html danielgagnon@hotmail.com

  103. Georgia Tech DOES use linux! by labradore · · Score: 1

    Our Operating Systems I Class uses linux (embedded) on little bitty compaq skiff boards. Take a look at the Spring 2000 class page!

  104. Opsys classes at my school by Anonymous Coward · · Score: 0

    At my school they teach two opsys courses. The first one is a mix of Linux/Unix and NACHOS. The first five assignments are simple Linux/Unix (you have the choice) usage assignments, making calls to the kernel api and stuff like that. After that we use a Unix emulator called NACHOS. It runs on solaris, and I think there are ports to Linux. Anyway the first assignment is to code the "read" and "write" commands. After that we did semaphores, file I/O system calls, and for our last project we had to re-write the file system. Each project was 1 week, and we had to do them in groups of two. You could do something similar in Linux, but it would become really complicated, since it would require some re-writing of the kernel to take out the features you want the students to code. The second semester opsys here is project based where each group of students has to create something. One example is a card reader controlled by a imbedded controller running a stripped down linux, the controller doubles as a web server that posts who has come through the door. Anyway that's the way opsys is taught here hope it helps.

  105. Planet of the Minix by fooperson · · Score: 1

    Hail MINIX! Check out http://www.doc.ic.ac.uk/~svb at Imperial College, London where second year computing students are tortured and made to write, in a group of three for five weeks, a task called DEBUGGER used to debug a program. It's no fancy debugging program but it was enough to make us students suffer. It teaches a lot about message passing, kernel structure and a good deal of other stuff you need to know about operating systems as a computing undergrad. Long live MINIX!

  106. operating systems course at Auburn University by Anonymous Coward · · Score: 0
    The OS course at auburn university replaced the old NACHOS system...

    Structure and functions of operating systems; process state models and scheduling algorithms; memory management; interrupt processing; auxiliary storage management; disk scheduling algorithms and file systems;resource allocation policies and deadlock; protection; concurrent asynchronous processes; design strategies.

    here's the url to the syllabus: CSE405 .

    Book: Linux Kernel Internals , 2nd edition

    Labs:

    Lab 1 -- installing Linux,

    Lab 2 -- writing a device driver

    Lab 3 -- process scheduling, part 1,

    Lab 4 -- process scheduling, part 2, (20%)

    Lab 5 -- memory management,

    Lab 6 -- disk management and file systems

    WAR D*MN EAGLE

  107. Columbia University by jg253 · · Score: 1

    Both the intro to OS and the advanced OS courses at Columbia University use linux. http://www.cs.columbia.edu/~nieh is the page of Prof. Nieh who teaches both courses. There are homeworks, etc. on that page that might be helpful. Since they could not afford to give root access to students at the school, and didn't want them to reboot machines constantly, they installed vmware (http://www.vmware.com) on the machines so that students could mess around with linux w/ little risk as far as messing up the systems. VMware also has some nice features to undo changes to disks, etc... good stuff! Some sample assignments: Writting Device Drivers (fairly easy). Adding a different scheduler to linux (such as lottery scheduling), etc.

  108. CS101 assignments by Micah · · Score: 1

    Lesson 1: How hypertext links work, and how to use them to your advantage. Assignment: Develop a simple affiliate program system and a server program that will keep track of how many hits should be credited to which participants.

    Lesson 2: How HTTP cookies store state information on client computers. Assignment: Develop a system that will store a customer's credit card information. Allow the customer to start up Netscape, go to your page, and buy something with a single click.

  109. Linux from scratch? by goodwid · · Score: 1

    I can't help but think about the HOWTO I read recently that outlined how to build a Linux installation from scratch. I think it would be a good way to teach students how an OS is built from the ground up, not as much as from the code level but where everything goes, how to config it all, etc. Worth a peek, at least. Maybe as a side project.

    --

    The net interprets censorship as damage and routes around it. -- John Gilmore
  110. CS111: Hacking the Linux Kernel by witten · · Score: 1

    Here at UCLA, they've just switched the CS operating systems class from hacking Minix to hacking Linux. Windows users who don't know Unix suddenly have to learn bash in two weeks and then begin hacking their own kernel syscalls when they're done with that. It makes for some interesting tech support for us at the UCLA LUG.

  111. try 4.4BSD and MINIX..Linux is ok though by Anonymous Coward · · Score: 1

    try studying the 4.4BSD kernel. good books you may wanna try: The design and implementation of the 4.4 BSD and the TCP/IP illustrated books by Rich Stevens. Minix-the tanenbaum book ofcourse linux is a moving target and it may be hard for a student to keep up. but if u wanna try it, this is the books that i own and also recommend. Linux core kernel commentary by Maxwell, Linux device drvers by allesandro rubini. another good OS book is the OS book by william stallings.

  112. Minix rocks by Anonymous Coward · · Score: 0

    I think Linux would be to complex. We used Minix on Solaris, and the kernel source was about 300 pages. Thats quite a lot to digest. Anyway we had to analyse critical sections in Minix, which I think resulted in a 20 page or so report, by the time you've finished that one you have a really good idea of whats happening. We had to go into considerable detail to justify/dismiss each critical section, and there are quite a few non trivial ones. Jon.

  113. Freenix-based CS curriculum by Anonymous Coward · · Score: 0

    When I was at Virginia Tech as a CS major (starting back in 1993), we used Digital DECstations with Ultrix installed. The entire curriculum was Unix-based. This, I believe, is how *all* CS curricula should be structured. The problem I have with many lesser programmes around the country is that the vast majority are Windows-based (either 9x or NT); this OS family is not sufficiently time-tested or powerful enough to give the student an appreciation for a well-crafted operating system. Whatever one's beefs with *ix, it's been around for 35 years (or even earlier if you consider that it was a reworked version of MIT's MULTICS time-sharing system). It's proven. It works. So basing the curriculum on some free clone of Unix is a Good Thing(tm).

  114. More eyeballs, shallower bugs by sydbarrett74 · · Score: 1

    Wouldn't it be cool if the students could not only learn, but actually contribute to the Linux project? My beef with many of the CS assignments I got was that they were ivory-tower and not really applicable to the real world. Now obviously, the students wouldn't start out doing advanced hacks, but tweaking the source to add genuinely useful features (like making the number of hash-marks/KB in the FTP client configurable). If the prof deems these features truly useful, he can arrange to have them integrated into the mainstream distro. Just think, x number of additional coders! Not only learning, but actually doing something useful to the world at large!

    --
    'He who has to break a thing to find out what it is, has left the path of wisdom.' -- Gandalf to Saruman
  115. Systems Programming by PCGod · · Score: 1

    I am currently taking a course like this (Systems Programming). We are using Linux as our development OS. The ultimate goal of the course is to write a device driver for a single board computer(m68k) that will communicate back to the desktop via the serial port (ooh... and I get a whole 64k of ram to put the system on the sbc :-)

    First, we are learning the internals of the linux OS (fork, exec, malloc, *yawn*) by writing some small C programs. Our textbook is "Beginning Linux Programming Second Edition" (ISBN 1-861002-97-1). It's got some nice programs to start on plus a nice chapter on device drivers. If you want to check out the course, the URL is http://cs.sonoma.edu/~bob/cs_310/310general.html

  116. Use Nachos! by Anonymous Coward · · Score: 1

    While Linux is a great open source OS, to use Linux to teach an introductory course in operating systems may not be the best choice. Students tend to learn best by implementing functionality. This means developing a file system, semaphores, process management, fork, exec, etc. Nachos is a great tool and is widely used to help students learn by doing.

    Now if you want to teach a course solely on OS theory and design, then Linux is a good choice, but even then I would go with one of the BSDs. A lot of Unix systems are based off of BSD 4.4 or 4.2, so learning those internals will help you understand VMS, FreeBSD,OpenBSD,NetBSD, Sun, etc.

    Good Luck!

  117. Linux Trace Toolkit by Anonymous Coward · · Score: 0

    If you really want to know what's under Linux's hood, then check out the Linux Trace Toolkit : http://www.opersys.com/LTT
    Using it and extending it could very much help anyone understand the ins and outs of Linux. Using this in a CS course about OSs does make a lot of sense.

  118. Linux In University Courses by CelestialWizard · · Score: 1

    Here at Queensland University of Technology (BNE - AUS), they use Linux (mainly Redhat 6.0) a hell of a lot in the IT Labs. For all the network admin, management, comparative network systems, etc.. subjects, RH6.0 is used. They sell it in the Computer Shop and there are numerous books (mainly rubbish Unleashed ones) in the bookstore.

    For the Operating Systems subject, it is split between Unix (SysVR4 - redhat) and NT4. All this in 13 weeks (ouch, it used to just be the unix in all that time!). In that we cover csh, shell scripting in sh/bash, i/o, pipes, memory management, etc...
    For projects / assignments, we have to write a C parser for unix, and for NT, a basic device driver. we haven't been given the specs for the VxD as of yet however.

    In the previous subject - Computer Architecture - we had to write a mouse driver (for DOS of course) using Assembler, now wasn't that one fun boys and girls!


    My $0.02
    \\||//
    ----ooo00ooo----

  119. Use Minix by Azul · · Score: 1

    I would not recommend GNU/Linux for an operating systems class.

    As everybody who has been following its history ought to know, Linux is a clon of Minix, which was A. Tanenbaum's operating system. Tanenbaum designed it with one specific goal: To make an operating system simple enough so it could be fully understood by undergraduate students in the course of six months. He received a -LOT- of patches and suggestions that would made it a far better system but he refused to integrate them on his main distribution because it would make his code difficult to understand. Linus Torvalds did nothing but take all those patches and suggestions and organize them around what was initially known as Freax and is now called Linux.

    Back to the question, I'd highly recommend the use of Minix over the use of Linux for an operating systems class. Minix is very easy to understand and can help your students get the internals about many interesting parts of operating systems design far better than Linux. Things such as disk, virtual memory/protected memory, processes and the like are very easy to understand on Minix and they reflect what is happening on most modern operating systems.

    Besides, if you choose to go with Minix, you'll be able to use Tanenbaum's -EXCELENT- books on the subject.

    If your goal is to help your students understand operating systems, I'd consider choosing Linux a mistake.

    Alejo.

  120. CS 325: Operating Systems at NMT by Anonymous Coward · · Score: 0
    When i took OS at New Mexico Tech, it was taught by Victor Yodaiken (RTLinux) and Cort Dougan (PPCLinux). The first assignment was to write a fully working user level threads library for Alpha/Linux due two weeks after the first class. Admittedly it was hard; the reason why was mainly to cut the class size down from 65. That didn't work, because everyone loved the challenge.

    The second assignment was to add a system call to the Linux system kernel (and to install Linux on a removable hard drive so that you could play with the kernel and not have root on the whole network).

    The third assignment was to pick a project of our own that was kernel related, and do it with Linux. We had groups of 2-3 people a piece. My teammate and i decided to try to add encryption to the TCP/IP stack (sort of like SWAN or IPSEC). We never got it fully working, but got far enough to get a good grade.

  121. Linux OS course at Clemson by SiliconKim · · Score: 1

    I took a Linux OS course at Clemson University. CS 822 taught by Dr. Geist. We used the book "Linux Kernel Internals" (don't remember the author.) www.cs.clemson.edu Some of the course projects were a driver for a particular graphics card, adjusting the page-swap algorithm, adjusting the memory access algorithm, and several others. There were about 10 mini-projects in all. Dr. Geist would be a good person to get in touch with. He has made many contributions to Linux and knows Linus Torvalds. He has been teaching this course for several years; he and the course have an excellent reputation.

  122. GROW IS NOT AN ACTIVE VERB! by Anonymous Coward · · Score: 0

    "... of the locking strategy the only people who can effectively maintain and grow it are the original authors ..."
    ARGGGGGGGGGGGGGGGGGGG!
    PEOPLE WHO MISUSE THE WORD GROW SHOULD BE PETRIFIED IN HOT GRITS!

    1. Re:GROW IS NOT AN ACTIVE VERB! by shepd · · Score: 1

      >ARGGGGGGGGGGGGGGGGGGG! PEOPLE WHO MISUSE THE WORD GROW SHOULD BE PETRIFIED IN HOT GRITS!

      The "New Webster's Expanded Dictionary - 1991 Edition" doesn't agree:

      grow, gro, (verb intransitive, pretense grew, past pretense grown): To be augmented by natural process; to increase; to make progress; to become; to accrue; to swell. -- (verb trasitive): To raise from the soil; to produce.

      transitive - Taking an object after it, as a verb.

      intransitive - Designating a verb which expresses an action or state limited to the subject.

      Seems like grow can be used either way, active or passive...

      So grow this into your memory for future reference... :-)

      --
      If you could be told what you can see or read, then it follows that you could be told what to say or think - BoC
  123. There's a project mill out there just waiting by xant · · Score: 2
    And it's called sourceforge.net. If you're looking for "small" projects, have your students shoot out there to sf.net, pick one or more projects that are personally interesting to them, find the project's "TODO" list and implement a few features for the sf team. Turn in the before-and-after source, explain what the feature was and how you implemented it. Would require a modicum of oversight by the professor beforehand so he could make sure that everyone's project was about the same complexity and amount of work. Sourceforge even contains hierarchically categorized lists so you could channel your class into a specific category of application or problem depending on the particular class or module you were in.

    If even one university put this sort of class project into operation the open source community would benefit tremendously. Imagine: instead of having a new flavor of mp3 encoder coming out every day, students could all pick their favorite and make it better.

    And I don't think I need to tell you that this would be an important learning process for CS majors today, given the open source revolution we seem to be in the midst of. Writing the code is important, but learning the CVS model of development has real-world implications (even if you go to work for a commercial software entity like I did). Any coder can sit down and knock off a simple program from scratch; it takes real knowhow to learn how to work with and leverage other people's code.

    --
    It's rare that you're presented with a knob whose only two positions are Make History and Flee Your Glorious Destiny.
  124. NetBSD [was Re:real time linux ... ] by Christopher+Cashell · · Score: 1

    Another suggestion might be NetBSD. In my experience, and discussion with other devlopers, I've come to the conclusion that NetBSD has one of the most elegant and cleanly written kernels anywhere.

    I believe this comes about due to a difference in philosophy. With linux, the philosophy is to get it done, period. It may not be pretty, nor as good as it could be, but it will work. Perfecting it can always be done later.

    NetBSD developement follows a different philosophy, that of getting it right the first time. For this reason, NetBSD isn't always quite as cutting edge as Linux, but what they do implement, they plan careful and do well.

    Also, the ever present goal of ultimate portability has helped NetBSD. I've found portability to be a key aid in writing good programs, as a well written program tends to be inherantly more portable than a badly written one.

    --
    Topher
  125. Take a look at "Linux Kernel Internals" by sdprenzl · · Score: 1

    ...by Beck, Boehme, Dziadzka, Kunitz, Mangnus, and Verworner (second edition). Wish we'd use it, because it's cover to cover Linux kernel and OS in general.

    --
    --- WWSD? What Would Strider Do?
  126. One more suggestion by Taco+Cowboy · · Score: 1



    Since the professor is interested in getting his/her students to know Linux better, in the meantime contributing something positive back to the Linux community, why not do the following ?

    What Linux _really_ lacks right now is a utility much like the "Norton Utlity" that runs on M$ Windows.

    Some of the recent version of NU are really interesting. Their service runs a gamut from disk defrag to NDD to registry correction and much much more!

    If the professor's student can hack up a NU like thing for Linux, they not only do the Linux community a favor, they also have learned QUITE A LOT ABOUT THE LINUX OS, its File System (to do defraq) and many other things (to do a Linux optimization thingy).

    BTW, are there anyone out there who is doing a NU clone for Linux?

    --
    Muchas Gracias, Señor Edward Snowden !
  127. A Linux utility that the students can make by Taco+Cowboy · · Score: 1



    Since the professor is expressing interest in getting his/her students to study Linux, why not do something in the meantime to make the lives of the people in the Linux community worldwide easier, by producing a utility that is akin to the Norton Utility that runs under the Microsoft Windows?

    What Linux _really_ lacks right now is a utility much like the "Norton Utlity" that runs on M$ Windows.

    Some of the recent version of NU are really interesting. Their service runs a gamut from disk defrag to NDD to registry correction and much much more!

    If the professor's student can hack up a NU like thing for Linux, they not only do the Linux community a favor, they also have learned QUITE A LOT ABOUT THE LINUX OS, its File System (to do defraq) and many other things (to do a Linux optimization thingy).

    BTW, are there anyone out there who is doing a NU clone for Linux?

    --
    Muchas Gracias, Señor Edward Snowden !
  128. OS Textbook that Uses Linux by binger · · Score: 1
    My OS course is using Operating System Concepts A Modern Perspective (Second Edition) by Gary Nutt.

    This book includes Linux-based programming assignments.

  129. for teaching basic concepts... by Anonymous Coward · · Score: 0

    ...such as threading, semaphores, etc I think Xinu from Douglas Comer is a much better system - simpler and easier to understand. Leave the second semester for the more difficult implementations of these concepts in Linux. Anyway, there's my two cents...

  130. Linux is too complex for a learning OS by geggle · · Score: 2

    I believe that Linux would probably be too complex for use in an introductory-style OS course. Perhaps we are missing the point here - OSes used in teaching courses should be a) simple, b) easy to modify and c) allow investigation a selection of concepts, without having to know it all at once. They are not for contributing to Open Source success.

    In my undergrad OS course we used some funky custom-built thing on PDP-11/03's (Oooo... those front-panel switches :-). When I left University, they were using Minix. Perhaps something else has come up since then, but I can't convince myself that it is Linux.

  131. Actually, it isn't by shaldannon · · Score: 1

    The Auburn University Computer Science and Software Engineering Department uses linux in it's cse 405 intro to operating systems course as the basis for the lab. It's been a while since I took the class, but topics included making a device driver, scheduling, and memory and process management. It works well, and the students learn everything from installation to recompiling the kernel.


    Who am I?
    Why am here?
    Where is the chocolate?

    --


    What is your Slash Rating?
  132. No need for NU by ZorkZero · · Score: 1

    The Norton Utilities for dos was a set of utilities that attempted to fill in what was missing from DOS. A hex editor, repair filesystems, investigate system info, search for strings in files, etc. etc.. This all exists in Linux already. To make a gui front end for some of it might be interesting, but as for duplicating the functionality of the existing utils, don't bother. The Norton Utilities for Linux already exists, it's just standard equipment.

  133. Duh. by Anonymous Coward · · Score: 0

    Christ you people are stupid. Here's my two cents so you can buy a clue: USE MINIX. That's what it is for!

  134. Here is something that we had to do by Fulcrum · · Score: 1

    One of the projects that we had to do in our OS course was writing a simple system call and integrating it into the kernel! I think this will be a good exersise...

  135. Re:Minix may be better - how Tanenbaum does it by yiegie · · Score: 1

    Here at the Free University of Amsterdam, we have the one and only Tanenbaum running around. This means that we use his books Computer Organization, Computer Networks and Operating Systems. IMHO, they are excellent books for learning a lot of basics.
    <P>
    I haven't done the Computer Networks assignment, but I understood it's about implementing FTP, together with some underlying structure. (like TCP/IP ??)
    <P>
    The Computer Organization course is accompanied by a mandatory assembly assignment, where we had to implement a memory pager on an 8086 emulator.
    <P>
    The CN and OS courses are also both accompanied by an assignment, of which one is optional. For the OS assignment, we had to modify the kernel to implement:
    <OL>
    <LI>A message log device - learn a lot about minix message passing and memory device drivers
    <LI>Access Control Lists - how does the filesystem and access control work?
    <LI>Memory defragmentation - how does memory management work?
    </OL>
    As you can see, the assignment covers a lot of the OS and it's not a bad course. You have to dig through lots of reasonably commented code, with a good book at your side.
    <P>
    Some comments below argue against kernel hacking on the grounds of slow debug cycles; minix doesn't do much, but it boots really fast, making this not much of an issue.
    <P>
    I really learned a lot of this assignment: how fast deadlines approach, how terrible it is to read someone else's code (esp. C), and that I never want do any kernel hacking anymore :-)

    --

    .sigmentation fault

  136. hey, we were in the vmware news for this by Anonymous Coward · · Score: 0

    At columbia university the os course was taught using vmware and linux 6.0. It was great, I got graded for making modifications to the kernel. The course website is at http://www.cs.columbia.edu/~w4118/ That has the 5 projects that we did.

    Vmware just had a press release about it, it was pretty fun....

  137. DeCSS by Khopesh · · Score: 1

    How about using DeCSS for Linux drivers on DVD players? Any universities with enough guts?

    --
    Use my userscript to add story images to Slashdot. There's no going back.
  138. Assembly on Linux? by Ramalq · · Score: 1
    Though not an OS class, I am currently in a 300-level introduction to Assembly on the x86 processors. We have a new professor who's currently teaching our class using TASM (Borland's assembler) on MS-DOS as was the tradition before him. However, he is considering teaching it in Linux next semester using asm86 or something like that.

    I, of course, am always an advocate of learning more about Linux, but I am curious as to what, if any, advantages there would be. I am also curious about other introductory assembly courses that are taught in Linux. Friends of mine have used SPARCs (running Solaris, I assume) too, but I haven't heard of any Linux classes.

  139. Have you played with the NU for windows? by Taco+Cowboy · · Score: 2



    I agree with what you said, that NU for DOS is not needed.

    But I am NOT talking about NU for DOS. I _am_ talking about NU for windoze.

    Have you played with the latest version of NU for windoze?

    You'd be amaze how many things they have there. Some of those things are _seriously_ needed for Linux.

    And I am not joking.

    --
    Muchas Gracias, Señor Edward Snowden !
    1. Re:Have you played with the NU for windows? by Anonymous Coward · · Score: 0

      like what ?

  140. Why don't you use Minix ? by jbbodart · · Score: 1

    Minix is a little Unix written by Andrew Tannenbaum to learn how OS works. Very early versions of Linux were based on Minix. The kernel sources are fully documented and lots of exercices already exist. I think that's the good choice. Minix Home : http://www.minix.org

  141. OS Projects by Raziel+Seraph · · Score: 1

    Although the projects are written for Windows NT, I believe the operating system projects found in "Operating System Projects Using Windows NT", by Gary Nutt are very useful in any environment. The pace is reasonable, and each project amounts to a good one or two week project, which makes completing the book in a semester doable. The projects are easily translated into any operating system, however the sample code is given for Windows NT. This book is also a cheap way to get your hands on a copy of Windows NT and Microsoft Visual C++, as it comes packaged with academic versions of both. The projects cover most OS topics, such as multithread synchronization, virtual memory management, pipes, file IO, and even using TCP/IP for creating a simple talk program.

  142. Brigham Young University by Anonymous Coward · · Score: 0

    BYU used to use Linux in their Operating Systems course. I don't think they do anymore, though. The professor that taught the course (Dr. Evan Ivie) retired, and I think the new guy prefers NT. Still, there might be some information at www.cs.byu.edu, and your professor might also be able to get some info and ideas from Dr. Ivie.

  143. UMaine "Operating Systems" course by Anonymous Coward · · Score: 0
    Here at UMaine @ Orono, we have a course (I think it's 3rd year) called Operating Systems which is designed to teach the basics.. They have a fictional operating system called "Brain 98" for which they give you specifications and some assembly programs. Then you slowly code an emulator for it that handles memory allocation, exceptions, stdin/stdout, etc..

    Only problem is that we have a new professor this semester who actually wants to do away with the Brain project!! The professors who formerly taught the course rallied for the project, so it's still going for the time being, but it's been scaled back to a minor part of the overall structure. I'm really, *really* hoping either he's gone by the time I take the course or he's at least not teaching it anymore. We have far too little practical experience in programming.

    Heck, when they taught us C++, one prof taught the STL and the other taught how to code stuff like binary tree template classes and sort routines and things... Unfortunately, I happened to take the latter. So I understand how all the routines work, but I couldn't use them without completely recoding them myself. There needs to be some kind of balance.

    Ok, now I have to go back to my killer Discrete Structures homework.. =)

    Lime

  144. PK threads by rjs397 · · Score: 1

    I study at the University of Southampton, UK, taking a Computer Engineering degree

    For a Real Time Computing course we are using PK-threads, a tiny (28kB) kernel that supports standard POSIX multithreading.
    It is also available as an OS called roadrunner.
    It is simple enough to fully understand, but still has enough complexity
    e.g. install IRQ handlers, dealing with threads running in user and kernel space, memory protection.

    Other projects in the past have included:-
    * FAT12 disk reader in linux
    * Add to a small compiler to add more language constructs
    * Simple news server
    * OpenGL

    I think that linux would be too hard to study, although it is the perfect development system. We get a set of CD's each year with a copy of RedHat.

    The suggestion in some posts that students should be set to work on Open Source projects is stupid. Students do these projects to learn about the mistakes they might make in programming!! I am sure we would all rather have people who want to write a program, improve and support it

  145. We use it at Johns Hopkins... by your+jesus · · Score: 1

    We use Linux to teach the Operating Systems class now at Johns Hopkins. This is new for last semester and it went rather well. Of course VMware wasn't nice enough to GIVE us licenses. I think we made a good impact on students and our projects were very good examples of how to learn kernel internals and operating system fundamentals.

    Check it out at CS318/CS418 class projects.

    I designed the assignments (the second was the hardest and needs revision or replacement), but I think it went very well and we had a positive response from students. I hope we do it the same way next year!