# OS-learning **Repository Path**: morzunt/os-learning ## Basic Information - **Project Name**: OS-learning - **Description**: 操作系统学习实践 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-15 - **Last Updated**: 2022-03-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OS-explore 这是一个关于操作系统探索项目,主要包括2021年USTB操作系统课程中的相关课程作业和实验的一些小Demo ## [1、Semaphore —— 信号量及其P、V操作的实现](./Semaphore/) 本项目通过嵌入汇编,实现操作系统的信号量机制和P、V操作。 主要的原理使用了x86平台的`XCHG`汇编指令,来实现类似于`TSL` (Test and Set Lock) 原子指令的功能,`XCHG`指令自身带有LOCK属性,在执行期间处理器会锁住总线,其本身也是一条原子指令,功能是交换两个操作数的值。将`XCHG`封装成一个函数,可先将立即数 1 `MOV`到一个寄存器R中,然后通过该指令将内存操作数与该寄存器交换,最后返回寄存器R中的值,即可实现`TSL`(Test and Set Lock)的效果,简单来说“读后置一”。根据`TSL`信号量机制,利用忙等待的方式实现的P、V操作。 有关项目的详细描述,可进入[`./Semaphore`](./Semaphore/)目录中查看。 ## [2、MultFeedbackQueue —— 多级反馈队列的实现](./MultFeedbackQueue/) 本项目实现操作系统关于进程调度中的多级反馈队列的调度算法,多级反馈队列的主要思想是将进程按优先级划分为不同的就绪队列,将相同优先级的就绪进程挂到相应的优先级队列中,每次调度都是选中优先级最高的那个就绪队列的队头元素,如果优先级最高的队列为空,则往下一个优先级队列中找,直到找到一个在当前就绪进程中的一个优先级最高的进程来调度执行。 同时在调度过程之中,需动态改变进程的优先级。当前刚运行完的进程,优先级降一级,然后挂到下一级的队列中;若当前运行的进程被更高优先级的进程剥夺了 CPU,则其优先级不变,将其挂回原来队列的队尾。对于每个队列中等待时间最长的进程,提升该进程的优先级,并将其挂到上一的队列中,使其更有机会被调度。不同优先级的进程被调度后,所获得的运行时间片不一样。一般来说,优先级越高的进程获得的时间片越少。以保证高优先级的进程和低优先级的进程都能获得相对公平的CPU份额。 有关项目的详细信息,可进入[`./MultFeedbackQueue`](./MultFeedbackQueue/)目录中查看。 ## [3、Linux系统调用实践](./LinuxSysCall/) 在Linux或Windows环境下(二选一),设计C/C++程序,利用操作系统提供的共享内存和信号量机制,实现生产者-消费者问题。给出实现方法、完整源代码和测试验证。 本项目选择Linux环境,通过生产者和消费者的案例来学习Linux IPC(共享内存)和信号量机制等系统调用,因此须在Linux系统中编译和运行本项目,实验者已在 Ubuntu 系统中运行成功。 有关项目的详细信息,可进入[`./LinuxSysCall`](./LinuxSysCall/)目录中查看。