Linux深入学习
平时学习中对于操作系统学习的点滴的积累
黎辰
其实一切只为一个理由,一切理由在一个人面前也都沦为借口
展开
-
进程(线程)间的同步互斥问题(五) 读者-作者问题
问题描述:用读者和写者来模拟并行计算的过程:读者在读的时候,写者不能写,必须等到读者读完多个读者可以读一本书同时只能一个作者在写在写的时候,读者不能读问题分析:作品是共享的资源,作者和读者要竞争这个资源,要避免决策导致某一方被饿死(长时间竞争不到资源)。共享资源不是简单的只能有一个人能使用,而是在读者读的时候能够多人同时共享资源,在写者占有资源的时候,只能有一个写者持有这个资源基本思原创 2015-11-05 21:23:22 · 3183 阅读 · 0 评论 -
进程(线程)间同步互斥问题(四) 三个烟鬼问题
问题描述三个烟鬼问题实际上就是线程的并发问题:三个烟鬼,一个有烟草,一个有烟纸,一个有火柴上帝拿走两个人的材料给一个人,那么你那个人可以抽一支烟当那个人抽完这只烟的时候,上帝重新做决策题目分析:-其实就是有前提条件的同步问题:“上帝给材料才能抽烟”“当前抽烟的抽完上帝才能指派下一个人”同时只会有一个人在抽烟基本思路:首先考虑上帝: 上帝指派人的时候,不能有人在抽烟,所以需要一个信原创 2015-11-05 12:59:20 · 2297 阅读 · 0 评论 -
进程(线程)间同步互斥问题(三) 熟睡的理发师问题
问题描述:熟睡的理发师问题描述的是多个进程(线程)之间的通信与同步问题:有一个理发师的椅子,和n个顾客的椅子如果有顾客在椅子上等,那么理发师为他剪发,否则理发师就在自己的椅子上睡觉。如果理发师在熟睡,那么顾客会叫醒理发师,否则顾客会看有没有空椅子,有的话,他坐下等,否则,他将离开理发店。问题分析:首先是避免死锁,也就是理发师一直在睡觉,所以我们采取让顾客叫醒理发师的方式,只要理发师一空闲下原创 2015-11-05 09:50:18 · 14013 阅读 · 0 评论 -
进程(线程)间同步互斥经典问题(二)哲学家问题
问题描述:哲学家问题,用于抽象死锁和资源耗尽问题:有n个叉子,n个哲学家,每个哲学家需要两把叉子才能吃饭。他们围着圆桌坐,也就是每个人左手边右手边都有叉子,但是可能是同一把叉子。每把叉子同时只能有一个人在用问题分析:主要是要考虑死锁和资源耗尽的问题:考虑死锁的情况,每个人都拿起叉子,那么都在睡觉等另一个哲学家放下叉子,那么所有的进程都在睡觉,没有进程能够唤醒,那么陷入死锁考虑资源耗尽的情原创 2015-11-05 00:58:10 · 2492 阅读 · 0 评论 -
进程间同步互斥经典问题(一)生产者-消费者问题
问题描述:生产者-消费者问题,也叫做缓存绑定问题(bounded-buffer),是一个多进程同步问题。 即有两个进程:制造少和消费者,共享一个固定大小的缓存 制造商的工作是制造一段数据,放进缓存,如此重复。 消费者一次消费一段数据,从缓存中取出。 要保证不让制造商在缓存还是满的时候仍要向内写数据,不让消费者试图从空的缓存中取出数据。 问题分析:要避免多个生产商竞争一个原创 2015-11-01 22:11:04 · 10775 阅读 · 10 评论 -
Unix编程(二)C语言利用PV原句解决5个经典的进程同步问题
问题定义利用信号量及PV操作来实现进程间的同步与互斥知识概要信号量机制:利用PV操作对信号量进行处理信号量(semaphore)的数据结构为一个值和一个指针,指针指向该信号量的下一个进程。信号量的值与相关资源的使用情况有关: 当它的值大于0时,表示当前可用资源的数量。当它的值小于0时,其绝对值表示等待使用该资源的进程的个数。信号量的值能且仅能 通过PV操作进行修改。P操作:执行一次P操原创 2015-11-01 21:04:25 · 5139 阅读 · 0 评论 -
Shell实现(四) 执行命令的实现(包含管道的实现)
基本思路:首先是执行命令的实现 通过exec族函数实现的然后是管道的实现,有两种实现方案,一种是调用pipe函数,但是既然可以自己写一个,为什么要记这么一个傻逼的函数呢? 调用pipe函数很无脑,需要一个规模为2的文件描述符数组,用来表示向管道中写的流和从管道中读的流自己设计一个也很无脑,建立一个文件作为管道的载体,然后方法和上面的类似。具体实现:第一种方案是代码比较简单的自己实现的p原创 2015-10-24 23:03:34 · 6278 阅读 · 1 评论 -
Shell实现(三)读取命令的实现
基本思路读取命令我采取的读取整个字符串后再进行分段和分析: 首先是parse_token将字符串通过分号为分隔,得到每组命令,每组命令当中只包含管道,输入输出重定向和单条命令及其参数。然后是parse_group将每段得到的字符串通过管道为分隔,得到只包含参数,输入输出重定向和单条命令的更加简单的命令串最后是parse_command分析单条指令,得到输入输出重定向的文件流和命令的属性还有命原创 2015-10-24 22:37:37 · 2099 阅读 · 1 评论 -
shell实现(二) 打印提示信息的实现
提示信息的内容提示信息包括当前的工作目录,操作的用户,是否为根用户等信息的呈现… 没有什么好说的,就是几行很简单的代码,难度相当于输出一个hello world !!!#include "lshell.h"/*************************************uid_t getuid();//获得当期用户的用户idvoid getcwd( char* , int ) /原创 2015-10-24 22:01:50 · 2643 阅读 · 0 评论 -
shell实现(一)设计接口和结构体
1.函数库的引用#include <sys/stat.h>//获得文件的属性的函数库#include <sys/types.h>//提供基本的系统数据类型,如CPU时钟周期等#include <sys/wait.h>//调用系统的阻塞等待函数#include <stdio.h>//C语言输入输出库#include <stdlib.h>//C语言标准库#include <errno.h>//原创 2015-10-24 21:48:36 · 3928 阅读 · 1 评论 -
UNIX编程(一) C语言实现一个模仿bash的shell实现
前言:作为天津大学软件学院的操作系统课程的一个简单的UNIX编程的需作业,需要的知识并不多。 - C语言基础 - 宏定义相关知识 - POSIX代码库 - READLINE代码库(选)基本功能:1.显示类似于类UNIX操作系统控制台的提示信息 当前工作目录当前用户信息2.指令分析 分析指令可指令的参数实现管道实现输入输出重定向 通过&实现后台运行 通过”(“和”)”实现su原创 2015-10-23 17:41:58 · 4778 阅读 · 6 评论