![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 70
DWQY
这个作者很懒,什么都没留下…
展开
-
操作系统实践(九)
这应该是最后一次,还是认认真真滴完成。 本次内容围绕一个问题,线程并发时对于全局变量会错位控制。所以必须加以限制,限制的手段有两种:条件变量、互斥信号量。 一、条件变量 条件变量的操作就三个:初始化、等待、唤醒线程。具体的用法如下: 有了条件变量,就可以在全局变量前面加上。线程并发时就会在执行前获取条件变量的情况了。 二、互斥信号量 信号量的使用是通过锁来实现的,所以信号量的操作包括初始化、上锁、解锁。具体如下: 其实我觉得二者没有什么区别,完成的功能都一样。而且在原创 2021-06-16 12:06:38 · 257 阅读 · 0 评论 -
信号量应用(PV操作)——经典PV操作
在这篇文章中,重点讨论三个经典的PV操作例题:生产者消费者问题、读者写者问题、哲学家进餐问题。对这三个问题会逐层分析,不断改进。希望能通过这个过程对于PV操作有着更深刻的理解。 生产者消费者问题 背景描述:有两类进程(生产者,消费者),生产者负责生产,生产后的产品会放到共享缓冲区内。共享缓冲区的大小为n。只要产品个数没有达到n就可以继续放。消费者负责从共享缓冲区内拿产品,只有共享缓冲区不为空,就可以一直拿。实现两个进程的协调工作。问题重点如下图: 1.0版本:void producer(原创 2021-06-10 10:45:11 · 2245 阅读 · 0 评论 -
三、处理机调度与死锁
上一章介绍的进程主要从概念出发,但程序执行终归是动态的。进程如何参与程序的动态执行过程呢?在多道程序下,进程的数量远大于处理机的数量。那如何对进程进行安排(处于就绪状态的进程有好多,选哪些进程给处理机执行),才能达到一些我们期望的指标(系统吞吐率,资源利用率,响应的及时性)?而这一切的实现很大程度取决于处理机调度性能的好坏。 从内容上说,本章大体可以分为三个部分:CPU调度、实时调度、死锁。下面让我们一一介绍下吧! 一、 CPU调度 一个程序从最开始在内存中到最后执行完毕经历了一段过程。从调原创 2021-06-10 00:54:07 · 382 阅读 · 0 评论 -
二、进程管理
进程是操作系统实现并发的基础,了解进程才能明白操作系统运行的实现过程。这篇文章对于进程进行一个讨论,希望在读完之后能对进程有一个清晰的认识。 进程概念 对进程概念的介绍,围绕着这几个问题: 1. 为什么要进程? 2. 什么是进程? 3. 进程由什么组成? 1. 为什么要进程? 多道程序环境下,程序并发执行。为了让各个程序相对独立,运行无误,引入进程这个概念来对并发执行的程序加以描述和控制(这个比较晦涩,从进程本身角度说,程序A运行的时候希望有一个独立的空间不受他人原创 2021-06-10 00:41:09 · 296 阅读 · 1 评论 -
一、操作系统引论
这学期开始操作系统课程,作为计算机专业的核心课程,这门课自然还是要好好滴学。按照之前的习惯,继续写博客梳理学到的知识,希望能够坚持下去吧! 在正式课程开始之前,老师抛出了十个问题(遗憾的是,我一个都不会。呜呜呜~)。这十个问题反映了操作系统的功能,在此对十个问题进行下列举。希望本系列的最后一篇能够对十个问题进行详尽的回答。 1. EXE、ELF是什么?运行一个EXE到底发生了什么? 2. C语言的库函数printf、scanf等是怎么实现的? 3. 512M的内存为什么能跑4G的游戏?原创 2021-06-10 00:27:38 · 277 阅读 · 1 评论 -
操作系统实践(八)
本次实验课程内容没有更新,留了一个作业,还是对于线程的训练,内容如下: 按照上节课的内容,对代码进行下修改,如下:#include<stdlib.h>#include<stdio.h>#include<pthread.h>#define NUMBER 10#define CPU_NUM 2#define CHILD (NUMBER/CPU_NUM)int array[10] = {12,7,9,10,11,16,3,5,7,20};struc原创 2021-06-07 00:43:39 · 205 阅读 · 1 评论 -
操作系统实践(七)
实验到此,正式进入线程部分。本次实验课的主要内容是线程的建立(pthread_create)和同步(pthread_join)。下面对内容进行下介绍:线程建立 为什么要有一个线程参数呢? 在多线程情况下,每个线程执行的任务差不多。但是输入参数不同。不使用线程参数的话,要为每一个线程写一个执行函数。这样代码重复性很大,通过设置参数,提供不同的参数来实现代码复用。根据需要,三种类型可选。线程等待 这里解释下为什么要有线程的返回值:如果不设置返回值的话就要用全局变量去保存每个线程的结果,不太方便原创 2021-05-29 22:38:17 · 264 阅读 · 0 评论 -
操作系统实践(六)
本次实验课也是没有新内容,继续对重定向、管道进行综合训练,题目如下: 但是,我没写出来!所以这篇先放一个好兄弟的代码,等过段时间不忙了再分析他的写自己的,嘿嘿!代码如下(因为不是一个人的代码,所以代码风格和前几版都不太相同,学优点就ok):#include<stdlib.h>#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<sys/wait.h>#i原创 2021-05-29 22:21:23 · 223 阅读 · 0 评论 -
操作系统实践(四/五)
本次实验课的内容涉及到以下几个方面: 1.文件的内核实现 2.标准的输入输出 3.系统调用dup和pipe 文件最基本的系统调用是open和close,open一个文件后会返回一个fd,作为这个文件的标示,后续有关于这个文件的操作都使用fd去完成。1.文件的内核实现 文件的内核实现中围绕着四个结构体:索引节点、file结构体、文件描述符表、进程控制块。下面介绍下它们各自存储的内容: 索引节点中保存了文件的大小、文件存放在磁盘的位置、文件的创建时间、修改时间、文件的所原创 2021-04-24 09:48:09 · 304 阅读 · 0 评论 -
操作系统实践(三)
本次实践的内容是关于进程。涉及进程的创建、执行、等待、消除返回。进程是并发执行且相互没有干扰的。对进程内容的保存用PCB(Process Control Block)结构体。本次实验涉及到与进程相关的四个系统调用如下:fork() // 创建进程exec() // 进程执行wait() // 进程等待exit() // 进程退出 下面就来详细的介绍一下四个系统调用(还是给出老师的课程图了,太全面了~)fork() fork的返回值大致分两种:0和非0。0就是子进程,通过返回值就可以原创 2021-04-19 23:26:19 · 304 阅读 · 0 评论 -
操作系统实践(二)
本节课的主要内容是:文件读写。在C语言中,我们可以使用fopen,fclose等函数进行文件操作。但下放到操作系统层次,就是一些文件的系统调用了。本节的主要内容也就是介绍下与文件相关的一些系统调用。 我发现自己写的,远没有老师提供的资料全面。所以在这里,我就直接用图片说明内容啦~ 以上就是本节的主要理论学习内容,下面还有三个作业进行巩固,我就把自己的答案附在上面,可能不是很简洁,但我后面会慢慢的进行修改完善滴~一、练习一:#include<stdio.h>int原创 2021-04-11 00:35:03 · 444 阅读 · 0 评论 -
操作系统实践(一)
前言:这学期开了操作系统课程,同步也有对应的实验课程。写一个系列对实验内容做一个梳理,也便于后续的复习参考吧! 本节内容:Linux系统的基础Shell操作指令、GCC编译相关一、基础Shell 操作指令——目录管理ls // 列出目录下的文件pwd // 显示当前工作目录cd // 更改当前工作目录mkdir // 创建目录lsls // 列出当前目录文件ls 路径 // 列出指定路径下所有文件cdcd 路径 // 进入指定路径目录cd .. // 返回上一级目录一、原创 2021-04-11 00:00:51 · 657 阅读 · 0 评论