Giter Site home page Giter Site logo

simpleos's Introduction

simpleOS

simpleOS项目是一个简单版的32位操作系统,支持8个终端页面,实现了一下简单的系统调用命令(ls,echo等等)。项目通过qemu来模拟32位操作系统运行所需要的硬件环境。本项目用作学习使用。

一、最终成果展示

进程管理相关的接口实现了9个,文件系统相关的接口实现了13个。

二,项目部署

项目部署请看这里

三、项目介绍

3.1、设计结构

boot只占据第0个扇区,大小只有512字节。让系统支持多进程,同时并发去运行。开启了分页机制,将进程与进程之间进行隔离。

3.2、中断管理

利用了CPU的IDT表进行管理,外部硬件用两块8259芯片,对键盘的事件进行相关的处理。

3.3、多进程

使用TSS进行进程切换。

给每个进程定义了一个task_t的结构,在里面增加了一个TSS的描述符,用TSS进行进程切换。

展示了如何手动切换进程。

保存相关寄存器到当前任务的栈,然后通过栈切换实现手动切换进程。

允许系统中同时存在许多进程,不同进程间采用时间片调试算法进行管理。

定义一个链表,将进行按先进先出的方式插入到链表中,每100ms切换进程运行。

3.4、进程同步

使用计数信号量解决行为同步的问题。对于多个进程访问共享资源,我们用互斥锁保证同一时间只有一个进程访问临界区。

3.5、内存管理

操作系统开启了分页机制,应用访问的线性内存需要通过转换表转换成对应的物理地址。(注意: 内核空间的内存不进行分页

利用分页机制,让操作系统占用0x80000000以下的区域(内核空间空间),进程则占用以上的区域(用户空间)。通过让每个进程都拥有自己的页表实现进程隔离。(事实上,实际32位操作系统是将高的1G作为内核空间,低的4G作为用户空间)

实际上,程序员只能使用虚拟地址。系统中每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的,而内核空间则是各个进程共享的。

3.6、权限管理

操作系统运行于特权级0,应用进程运行于特权级3。还通过分页机制对某些页做了特权处理,应用程序不能运行于特权级0的地址空间。

3.7、系统调用

使用调用门提供相应的系统调用接口来给应用程序使用。

3.8、ELF文件加载

解析ELF头,再解析表,提取出对应的数据拷贝到相对应的进程地址空间。

3.9、设备管理

设备管理层定义统一的设备操作接口,方便上层使用。

将所有不同的设备统一抽象成统一的接口,使操作系统内核只需要统一的操作接口就能实现设备的访问。

3.10、文件系统

3.11、shell

Shell俗称壳,即命令行解释器,它允许用户交互式的输入命令并解释执行,并且可以调用出相应的应用程序运行,从而让用户能够使用内核的功能去操作计算机。

Shell支持应用从磁盘中加载程序进行运行。

四、不足和展望

不足

  • 本项目只是demo级别的32位操作系统,许多接口和功能的实现非常简单,并且有安全漏洞。

  • 进程调度只是很简单的时间片轮转。

展望

  • 多加几个系统调用接口。

  • 增加命令的功能,例如让ls命令可以列出子目录的文件。

  • 提高某些功能的实现方式,例如将进程调度的时间片轮转调度切换成多级反馈队列调度,或者由多个调度算法进行进程的调度。

  • 增加TCP/IP网络协议栈

  • 可以支持用户多线程

simpleos's People

Contributors

jintongxu avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.