这一篇来讲一下Nachos里面的同步

首先,在synch.h里面,定义了三种与同步有关的类:Semaphore,Lock,Condition,下面来分析一下这三种数据类型

  • Semaphore

其类型定义如下

其中,value是该信号量初值,在初始化的时候被赋予值,queue是一个线程队列,里面存放着因为该信号量而被阻塞的线程指针,其重点是这两个P,V函数

P函数判断当前信号量是否还有剩余,如果没有,就将该线程加入到相应信号量的queue中,并且调用sleep进行线程切换,而V函数则判断队列是否为空,将其中一个等待线程加入到queue等待队列中,这两个函数执行时都需要关中断,所以可以认为其是原子性的,那么如果关了中断又调用sleep的话怎么开中断呢?我的想法是如果是之前运行过的thread,那么会回到schduler->run中,出来之后自然会打开中断,而如果是新线程,可能在thradroot中的初始化部分会设置一下中断状态

  • Lock

Lock的定义如下,可以看到它是由信号量来实现的,然后还记录了一下锁的拥有者

其Acquire与Release的操作其实就是简单的对于信号量的操作,其信号量lock初始化值被设置为1.如果获取锁不成功,则会进行线程之间的切换

  • Condition

条件变量这里,网上给的定义是:

与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用

我认为在这里Lock好像没什么作用...观察Wait与Singal函数源代码如下

wait的作用是阻塞进来的线程,将其全部加入到该条件变量的queue中,然后就调用sleep进行线程切换

signal的作用是从该条件变量的queue中取出一个线程加入到就绪队列中

综上,我认为condition的作用在于阻塞线程,知道满足某种条件会有其他线程调用signal,使得其中一个线程得以继续运行

那么这个lock有什么用呢,我觉着可能是怕出现外界也用了这个资源所以用lock限制一下进出。当然这只是我个人的见解,下一部分我会去看一下中断的形成与时钟中断的理解

  • 信号量在生产者消费者问题中的使用

设有nfull,nempty,mutex,则应该先进行full与empty的判断,之后再进入mutex互斥区,否则容易出现消费者进入mutex却无法取出物品生产者被阻塞在mutex外无法生产物品造成死锁的情况

Nachos操作系统synch(lab3)相关推荐

  1. nachos操作系统(一)

    今天来了解一下整个系统的构成. nachos-3.4下有一个C++例子文件夹和一个code文件夹,code文件夹下才是程序的源码,总文件夹下的makefile呢,就是进入各个子文件夹,make他们自己 ...

  2. java 动态分区 链表_大二作业——操作系统实验——C语言用双向链表,模拟实现动态分区式存储管理...

    实验:动态分区式存储管理 实验内容: 编写程序模拟完成动态分区存储管理方式的内存分配和回收.实验具体包括:首先确定内存空闲分配表:然后采用最佳适应算法完成内存空间的分配和回收:最后编写主函数对所做工作 ...

  3. Nachos系统简介

    Nachos是一款教学用的操作系统平台,它的全名叫做"Not Another Completely Heuristic Operating System",Nachos的运行必须借 ...

  4. 操作系统高级课程-1

    操作系统高级课程-1 声明 Course Introduction 系统能力培养 三个层次: 问题: 教学目的: 教学计划: 课程环节: 参考书: Nachos操作系统 e.g. 线程切换 Nacho ...

  5. 【访客必读 - 指引页】一文囊括主页内所有优质博客

    前言 嘿!彩蛋!感觉有帮助就三连呗! 本人现为一名「机器学习」方向的研究生,本科专业为 CS,期间主要参与 ACM 竞赛,因此主页内的博客一共分为如下四类: 机器学习 ACM 各类算法详细解析 + 题 ...

  6. 2021-08-19hit-oslab3进程运行的轨迹跟踪和实验统计

    具体实现 1.先挂载硬盘,在/hdc/usr/root/下创建process.c文件,文件的内容为: #include <stdio.h> #include <unistd.h> ...

  7. Nachos实习——Lab3同步机制实习报告

    Nachos实习--Lab3同步机制实习报告 文章目录 Nachos实习--Lab3同步机制实习报告 内容一:总体概述 内容二:任务完成情况 内容三:具体完成Exercise情况 Exercise 1 ...

  8. 操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析

    山东大学操作系统课设lab1 实验一 NACHOS试验环境准备.安装与MAKEFILE分析(lab1) 实验环境: 分析记录: 1. 准备虚拟机下LINUX宿主操作系统环境 2. NACHOS实验代码 ...

  9. 山东大学软件学院操作系统课程设计(2021秋季,nachos)实验1

    〇.前言 这几天翻到自己去年做的课程设计,感觉当时理解得还是挺深的(之前一直没觉得自己写得多认真,现在读起来觉得,嗯,虽然我只负责一半的实验,但给我98分真的不亏/doge),三篇半实验报告写了近一万 ...

最新文章

  1. Python爬虫常见面试题(二)
  2. Windows Phone 7 WebBrowser 中文乱码问题
  3. mysql hang住_mysql 5.7不定期的hang住重启-问答-阿里云开发者社区-阿里云
  4. SAP CRM WebClient UI html 格式的 Text 显示逻辑
  5. php注册页面模板,选项卡式WordPress登陆注册模板
  6. c++ fmt 库安装和使用示例、clion配置
  7. I/O多路复用——Reactor模式
  8. 2019年新款iPhone高清渲染视频来了 强迫症慎点...
  9. JAVA的节点流和处理流
  10. Qt第六课 QDateTime使用
  11. 在Linux上安装chisel bootcamp遇到的各种问题
  12. 多线程获取豆瓣网页的网络爬虫(Python实现)
  13. 福昕阅读器不能完全显示整个页面的解决办法
  14. Vue 动态响应数据变化
  15. 微信小程序运营案例(一)—— XXX商贸冷冻食品配送中心
  16. 谷歌学术搜索 2019
  17. esxi添加硬盘驱动
  18. Adolescent Suicidal Risk Assessment in Clinician-Patient Interaction
  19. 【蓝桥单片机】51单片机(stc15f)的两个寄存器TCON和TMOD
  20. 我怎样从珍爱网拿回18800会员费:交友平台相亲不靠谱

热门文章

  1. 小乐乐上台阶【斐波那契】
  2. Unity3D 如何干净的解除父子关系
  3. JSP常用标记——(web基础学习笔记)
  4. ACPC2015 K 树的直径
  5. C#学习(二十五)——如何在PictureBox上画十字架
  6. win10新建菜单只有文件夹怎么办?
  7. TS学习(九) :TS中的泛型
  8. MOOS通信框架初探(一)
  9. Android实战技巧之三十九:短信收发
  10. 电解电容和钽电容的区别是什么