forked from dmoisset/os-implementation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
6 lines (6 loc) · 13.4 KB
/
index.html
1
2
3
4
5
6
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hacking GeekOS</title><meta name="generator" content="DocBook XSL Stylesheets V1.64.1"><link rel="home" href="index.html" title="Hacking GeekOS"><link rel="next" href="intro.html" title="Chapter 1. Introduction"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Hacking GeekOS</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="hacking-geekos"></a>Hacking GeekOS</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="othername">H.</span> <span class="surname">Hovemeyer</span></h3><div class="affiliation">University of Maryland</div></div><div class="author"><h3 class="author"><span class="firstname">Jeffrey</span> <span class="othername">K.</span> <span class="surname">Hollingsworth</span></h3><div class="affiliation">University of Maryland</div></div><div class="author"><h3 class="author"><span class="firstname">Iulian</span> <span class="surname">Neamtiu</span></h3><div class="affiliation">University of Maryland</div></div></div></div><div><p class="copyright">Copyright © 2003, 2004, 2005 David H. Hovemeyer, Jeffrey K. Hollingsworth, and Iulian Neamtiu</p></div><div><div class="legalnotice">
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License.
To view a copy of this license, visit
<a href="http://creativecommons.org/licenses/by-nc-sa/1.0/" target="_top">http://creativecommons.org/licenses/by-nc-sa/1.0/</a>
or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
</div></div></div><div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="intro.html">1. Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a href="intro.html#audience">1. Intended Audience</a></span></dt><dt><span class="sect1"><a href="intro.html#background">2. Required background</a></span></dt></dl></dd><dt><span class="chapter"><a href="hacking101.html">2. Kernel Hacking 101</a></span></dt><dd><dl><dt><span class="sect1"><a href="hacking101.html#id2909282">1. Kernel Mode Restrictions</a></span></dt><dd><dl><dt><span class="sect2"><a href="hacking101.html#nolibrary">1.1. Limited Set of Library Functions</a></span></dt><dt><span class="sect2"><a href="hacking101.html#limitedstack">1.2. Limited Stack</a></span></dt><dt><span class="sect2"><a href="hacking101.html#nomemprot">1.3. Limited Memory Protection</a></span></dt><dt><span class="sect2"><a href="hacking101.html#asyncint">1.4. Asynchronous Interrupts</a></span></dt></dl></dd><dt><span class="sect1"><a href="hacking101.html#practices">2. Recommended Kernel Hacking Practices</a></span></dt><dd><dl><dt><span class="sect2"><a href="hacking101.html#assertions">2.1. Use Assertions</a></span></dt><dt><span class="sect2"><a href="hacking101.html#printstatements">2.2. Use Print Statements</a></span></dt><dt><span class="sect2"><a href="hacking101.html#testearly">2.3. Test Early and Often</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="overview.html">3. Overview of GeekOS</a></span></dt><dd><dl><dt><span class="sect1"><a href="overview.html#memory">1. Memory</a></span></dt><dd><dl><dt><span class="sect2"><a href="overview.html#pageallocator">1.1. Page Allocator</a></span></dt><dt><span class="sect2"><a href="overview.html#heapallocator">1.2. Heap Allocator</a></span></dt></dl></dd><dt><span class="sect1"><a href="overview.html#intsandthreads">2. Interrupts and Threads</a></span></dt><dd><dl><dt><span class="sect2"><a href="overview.html#interrupts">2.1. Interrupts</a></span></dt><dt><span class="sect2"><a href="overview.html#threads">2.2. Threads</a></span></dt><dt><span class="sect2"><a href="overview.html#threadsync">2.3. Thread Synchronization</a></span></dt><dt><span class="sect2"><a href="overview.html#interactions">2.4. Interactions between Interrupts and Threads</a></span></dt></dl></dd><dt><span class="sect1"><a href="overview.html#devices">3. Devices</a></span></dt><dd><dl><dt><span class="sect2"><a href="overview.html#screen">3.1. Text Screen</a></span></dt><dt><span class="sect2"><a href="overview.html#keyboard">3.2. Keyboard</a></span></dt><dt><span class="sect2"><a href="overview.html#timer">3.3. System Timer</a></span></dt><dt><span class="sect2"><a href="overview.html#blockdevs">3.4. Block Devices: Floppy and IDE Disks</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="projectoverview.html">4. Overview of the Projects</a></span></dt><dd><dl><dt><span class="sect1"><a href="projectoverview.html#projectsbrief">1. Project Descriptions</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#requiredsoftware">2. Required Software</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#installing">3. Setting Up the GeekOS Distribution</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#extracting">4. Starting a Project</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#transition">5. Continuing to a New Project</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#compiling">6. Compiling a Project</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#running">7. Running GeekOS Using Bochs</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#troubleshooting">8. Troubleshooting</a></span></dt><dt><span class="sect1"><a href="projectoverview.html#hints">9. Project Hints</a></span></dt></dl></dd><dt><span class="chapter"><a href="introproject.html">5. Project 0: Getting Started</a></span></dt><dd><dl><dt><span class="sect1"><a href="introproject.html#project0_assignment">1. The Assignment</a></span></dt><dt><span class="sect1"><a href="introproject.html#project0_hints">2. Hints</a></span></dt></dl></dd><dt><span class="chapter"><a href="elfparsingproject.html">6. Project 1: Loading Executable Files</a></span></dt><dd><dl><dt><span class="sect1"><a href="elfparsingproject.html#project1_intro">1. Introduction</a></span></dt><dt><span class="sect1"><a href="elfparsingproject.html#project1_requiredreading">2. Required Reading</a></span></dt><dt><span class="sect1"><a href="elfparsingproject.html#project1_synopsis">3. Project Synopsis</a></span></dt><dt><span class="sect1"><a href="elfparsingproject.html#project1_exeloading">4. Loading the Executable</a></span></dt><dt><span class="sect1"><a href="elfparsingproject.html#project1_testing">5. Testing Your Project</a></span></dt></dl></dd><dt><span class="chapter"><a href="usermodeproject.html">7. Project 2: Adding Processes</a></span></dt><dd><dl><dt><span class="sect1"><a href="usermodeproject.html#project2_intro">1. Introduction</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_requiredreading">2. Required Reading</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_synopsis">3. Project Synopsis</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_usingsegmentation">4. Using Segmentation</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_exeloading">5. Loading the Executable</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_memoryspace">6. Setting up the Process Memory</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_threadcreation">7. User Thread Creation</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_systemcalls">8. Adding System Calls</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_spawninit">9. Spawning the Init Process</a></span></dt><dt><span class="sect1"><a href="usermodeproject.html#project2_testing">10. Testing Your Project</a></span></dt></dl></dd><dt><span class="chapter"><a href="schedulingproject.html">8. Project 3: Scheduling</a></span></dt><dd><dl><dt><span class="sect1"><a href="schedulingproject.html#project3_intro">1. Introduction</a></span></dt><dt><span class="sect1"><a href="schedulingproject.html#project3_multilevel">2. Multilevel Feedback Scheduling</a></span></dt><dt><span class="sect1"><a href="schedulingproject.html#project3_semaphores">3. Semaphores</a></span></dt><dt><span class="sect1"><a href="schedulingproject.html#project3_timing">4. Timing</a></span></dt><dt><span class="sect1"><a href="schedulingproject.html#project3_evaluation">5. Evaluating the Scheduling Policies</a></span></dt></dl></dd><dt><span class="chapter"><a href="vmproject.html">9. Project 4: Virtual Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="vmproject.html#project4_intro">1. Introduction</a></span></dt><dt><span class="sect1"><a href="vmproject.html#project4_pagetables">2. Changing the Project to Use Page Tables</a></span></dt><dt><span class="sect1"><a href="vmproject.html#project4_pagefaults">3. Handling Page Faults</a></span></dt><dt><span class="sect1"><a href="vmproject.html#project4_pagingout">4. Paging Out Pages</a></span></dt><dt><span class="sect1"><a href="vmproject.html#project4_pagein">5. Page Ins</a></span></dt><dt><span class="sect1"><a href="vmproject.html#project4_copyinout">6. Copying Data Between Kernel and User Memory</a></span></dt><dt><span class="sect1"><a href="vmproject.html#project4_implementation">7. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="vmproject.html#project4_pagingfuncs">7.1. Functions in src/geekos/paging.c</a></span></dt><dt><span class="sect2"><a href="vmproject.html#project4_uservmfuncs">7.2. Functions in src/geekos/uservm.c</a></span></dt></dl></dd><dt><span class="sect1"><a href="vmproject.html#project4_extracredit">8. Extra Credit</a></span></dt><dd><dl><dt><span class="sect2"><a href="vmproject.html#project4_fastvictimselection">8.1. Improving Find_Page_To_Page_Out()</a></span></dt><dt><span class="sect2"><a href="vmproject.html#project4_userheap">8.2. Adding a User Heap</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="fsproject.html">10. Project 5: A Filesystem</a></span></dt><dd><dl><dt><span class="sect1"><a href="fsproject.html#project5_intro">1. Introduction</a></span></dt><dt><span class="sect1"><a href="fsproject.html#project5_gosfs">2. GOSFS: GeekOS FileSystem</a></span></dt><dt><span class="sect1"><a href="fsproject.html#project5_vfs">3. The Virtual Filesystem Layer (VFS)</a></span></dt><dt><span class="sect1"><a href="fsproject.html#project5_vfstypesandoperations">4. VFS Data Types and Operations</a></span></dt><dd><dl><dt><span class="sect2"><a href="fsproject.html#project5_vfsfilesystem">4.1. Filesystem</a></span></dt><dt><span class="sect2"><a href="fsproject.html#project5_vfsmountpoint">4.2. Mount_Point</a></span></dt><dt><span class="sect2"><a href="fsproject.html#project5_vfsfile">4.3. File</a></span></dt></dl></dd><dt><span class="sect1"><a href="fsproject.html#project5_requirements">5. Requirements</a></span></dt><dt><span class="sect1"><a href="fsproject.html#project5_direntry">6. GOSFS_Dir_Entry</a></span></dt><dt><span class="sect1"><a href="fsproject.html#project5_buffercache">7. The Buffer Cache</a></span></dt><dt><span class="sect1"><a href="fsproject.html#project5_gettingstarted">8. Getting Started</a></span></dt><dt><span class="sect1"><a href="fsproject.html#project5_issues">9. Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="fsproject.html#project5_concurrency">9.1. Concurrency</a></span></dt><dt><span class="sect2"><a href="fsproject.html#project5_filesharing">9.2. File Sharing</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ipcproject.html">11. Project 6: ACLs and Inter-process Communication</a></span></dt><dt><span class="chapter"><a href="apiref.html">12. GeekOS API Reference</a></span></dt><dd><dl><dt><span class="sect1"><a href="apiref.html#threadfns">1. Thread functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="apiref.html#Start_Kernel_Thread">1.1. Start_Kernel_Thread()</a></span></dt><dt><span class="sect2"><a href="apiref.html#Exit">1.2. Exit()</a></span></dt><dt><span class="sect2"><a href="apiref.html#Join">1.3. Join()</a></span></dt><dt><span class="sect2"><a href="apiref.html#Wait">1.4. Wait()</a></span></dt><dt><span class="sect2"><a href="apiref.html#Wake_Up">1.5. Wake_Up()</a></span></dt><dt><span class="sect2"><a href="apiref.html#Wake_Up_One">1.6. Wake_Up_One()</a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>9.1. <a href="vmproject.html#vmlayout">Virtual memory layout in GeekOS.</a></dt><dt>9.2. <a href="vmproject.html#faultactions">Actions to be taken when a page fault occurs.</a></dt><dt>10.1. <a href="fsproject.html#vfsdiagram">Overview of the Virtual Filesystem (VFS)</a></dt><dt>10.2. <a href="fsproject.html#sharedfile">Multiple File objects can refer to a common data structure</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Chapter 1. Introduction</td></tr></table></div></body></html>