Nachos操作系统synch(lab3)
这一篇来讲一下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)相关推荐
- nachos操作系统(一)
今天来了解一下整个系统的构成. nachos-3.4下有一个C++例子文件夹和一个code文件夹,code文件夹下才是程序的源码,总文件夹下的makefile呢,就是进入各个子文件夹,make他们自己 ...
- java 动态分区 链表_大二作业——操作系统实验——C语言用双向链表,模拟实现动态分区式存储管理...
实验:动态分区式存储管理 实验内容: 编写程序模拟完成动态分区存储管理方式的内存分配和回收.实验具体包括:首先确定内存空闲分配表:然后采用最佳适应算法完成内存空间的分配和回收:最后编写主函数对所做工作 ...
- Nachos系统简介
Nachos是一款教学用的操作系统平台,它的全名叫做"Not Another Completely Heuristic Operating System",Nachos的运行必须借 ...
- 操作系统高级课程-1
操作系统高级课程-1 声明 Course Introduction 系统能力培养 三个层次: 问题: 教学目的: 教学计划: 课程环节: 参考书: Nachos操作系统 e.g. 线程切换 Nacho ...
- 【访客必读 - 指引页】一文囊括主页内所有优质博客
前言 嘿!彩蛋!感觉有帮助就三连呗! 本人现为一名「机器学习」方向的研究生,本科专业为 CS,期间主要参与 ACM 竞赛,因此主页内的博客一共分为如下四类: 机器学习 ACM 各类算法详细解析 + 题 ...
- 2021-08-19hit-oslab3进程运行的轨迹跟踪和实验统计
具体实现 1.先挂载硬盘,在/hdc/usr/root/下创建process.c文件,文件的内容为: #include <stdio.h> #include <unistd.h> ...
- Nachos实习——Lab3同步机制实习报告
Nachos实习--Lab3同步机制实习报告 文章目录 Nachos实习--Lab3同步机制实习报告 内容一:总体概述 内容二:任务完成情况 内容三:具体完成Exercise情况 Exercise 1 ...
- 操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析
山东大学操作系统课设lab1 实验一 NACHOS试验环境准备.安装与MAKEFILE分析(lab1) 实验环境: 分析记录: 1. 准备虚拟机下LINUX宿主操作系统环境 2. NACHOS实验代码 ...
- 山东大学软件学院操作系统课程设计(2021秋季,nachos)实验1
〇.前言 这几天翻到自己去年做的课程设计,感觉当时理解得还是挺深的(之前一直没觉得自己写得多认真,现在读起来觉得,嗯,虽然我只负责一半的实验,但给我98分真的不亏/doge),三篇半实验报告写了近一万 ...
最新文章
- Python爬虫常见面试题(二)
- Windows Phone 7 WebBrowser 中文乱码问题
- mysql hang住_mysql 5.7不定期的hang住重启-问答-阿里云开发者社区-阿里云
- SAP CRM WebClient UI html 格式的 Text 显示逻辑
- php注册页面模板,选项卡式WordPress登陆注册模板
- c++ fmt 库安装和使用示例、clion配置
- I/O多路复用——Reactor模式
- 2019年新款iPhone高清渲染视频来了 强迫症慎点...
- JAVA的节点流和处理流
- Qt第六课 QDateTime使用
- 在Linux上安装chisel bootcamp遇到的各种问题
- 多线程获取豆瓣网页的网络爬虫(Python实现)
- 福昕阅读器不能完全显示整个页面的解决办法
- Vue 动态响应数据变化
- 微信小程序运营案例(一)—— XXX商贸冷冻食品配送中心
- 谷歌学术搜索 2019
- esxi添加硬盘驱动
- Adolescent Suicidal Risk Assessment in Clinician-Patient Interaction
- 【蓝桥单片机】51单片机(stc15f)的两个寄存器TCON和TMOD
- 我怎样从珍爱网拿回18800会员费:交友平台相亲不靠谱