操作系统
文章平均质量分 79
victory_523
爱生活,爱编程!!!
展开
-
进程间通信——管道(匿名与命名)
从物理上分,可以将管道分为同主机的进程之间的通信和不同主机间的进程之间的通信。从通信方式上来分,管道又分为匿名管道和命名管道,下面就匿名管道和命名管道的特性作以阐述。匿名管道(pipe)[含义]:管道是一个进程的数据流到另一个进程的通道,即一个进程的数据的输出作为另一个进程的数据的输入,管道起到桥梁作用。比如:当我们输入:ls -l | cat test 其中的 ls 和 cat 是两个进程, |...原创 2018-04-13 18:01:57 · 635 阅读 · 0 评论 -
进程间通信——信号量(Semaphore)
在Linux中支持System V进程通信的手段有三种:消息队列(Message queue)、信号量(Semaphore)、共享内存(Shared memory)。下面我们阐述一下信号量的进程间通信方式以及工作原理。IPC的一点补充Linux中的内存空间分为系统空间和用户空间。在系统空间中:由于各个线程的地址空间是共享的,即一个线程可以随意访问 kernel 中任意地址,所以无需进程通信机制的保...原创 2018-04-22 21:21:14 · 1412 阅读 · 0 评论 -
Linux信号处理机制(二)——阻塞信号
信号在内核中的表示信号在内核中一般有三种状态:(1)信号递达(Delivery):实际执行信号的处理动作称为信号递达;(2)信号未决(Pending):信号从产生到递达之间的状态;(3)信号阻塞(Block):被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作;注意:阻塞与忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示...原创 2018-05-16 23:27:28 · 4971 阅读 · 5 评论 -
多线程编程(二)——互斥锁与死锁问题
二元信号量提供了一种很方便的方法来确保对共享变量的互斥访问,即每个共享变量与一个信号量 s(初始为1)联系起来,然后P(s)和V(s)操作将相应的临界区包围起来。互斥锁是以提供互斥为目的的二元信号量,二者均属于挂起等待锁。互斥锁(针对于线程)互斥锁用于确保同一时间只有一个线程能访问被互斥锁保护的资源(互斥锁是针对于线程的)。锁定互斥量的线程与解锁互斥量的线程必须是同一个线程。互斥锁的引入必须对互斥...原创 2018-05-02 23:06:39 · 902 阅读 · 0 评论 -
多线程编程(一)——线程的创建、等待、分离、结合与终止
什么是线程?在Linux kernel中是不存在线程的,或者说没有真正意义上的线程,Linux下的线程都是用进程来模拟的,线程的实现就是多个共享数据信息的进程,我们称之为“轻量级进程”。多线程的引入多线程是指操作系统在单个进程内支持多个并发执行路径的能力,线程属于进程的的多个执行流。linux多线程设计包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。Linux系统下的多线程遵循POS...原创 2018-04-24 17:12:46 · 631 阅读 · 0 评论 -
Linux信号处理机制(三)——信号捕捉
本文主要针对信号捕捉展开话题,文中可能会提到前两篇博客中的知识点,对此迷惑的可以查看前两篇博客:信号引入、阻塞信号内核是如何捕捉信号的?如果信号的处理动作是用户自定义的函数,在信号递达时就调用这个函数,这称为信号捕捉。由于信号处理函数的代码是在用户空间执行的,处理过程较为复杂,我们画图来进行解释:上图很好的说明了信号捕捉时用户态和内核态的切换(用户处理信号最好的时机是程序从内核态切换至用户态的时候...原创 2018-05-18 17:57:10 · 4131 阅读 · 4 评论 -
生产者消费者模型(一)——模拟单线程的互斥与同步
在现实的软件开发过程中,经常会碰到如下情景:某个模块负责产生数据,这些数据由另外一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程和进程等)。产生数据的模块称之为生产者,而处理数据的模块就是消费者。条件变量在正式开始生产者与消费者模型之前,我们应该对条件变量有一个新的认识。条件变量(Condition Variable):它的作用是描述资源的就绪状态,属于线程的一种同步机制。互斥锁用于上...原创 2018-05-19 13:54:28 · 1103 阅读 · 0 评论 -
线程安全与可重入函数的区别与联系
线程安全线程安全是多个线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取结束并且释放了锁,其他线程才可使用,保证了数据的一致性。与之对应的则是线程不安全,对数据的访问不提供保护机制,导致多个线程先后更改数据造成数据的不一致问题,这是一个非常严重的问题。从之前的二元信号量到生产者消费者模型都存在很严重的线程不安全问题,不过那只是线程安全性问题的一...原创 2018-05-20 11:56:44 · 3662 阅读 · 2 评论 -
Linux信号处理机制(一)——信号引入
信号在最早的Unix系统中被引入,内核可用信号通知进程系统所发生的事件。在现实生活中,我们每天都在接触信号,下课铃声、红绿灯、闹钟等都是信号。信号的本质操作系统给进程发送信号,本质上是给进程的PCB中写入数据,修改相应的PCB字段,进程在合适的时间去处理所接受的信号。我们模拟...原创 2018-05-14 17:48:09 · 6283 阅读 · 0 评论 -
单例模式
什么是单例模式有时候我们会有这样的需求,需要一个类只能有一个对象被实例化,这时我们可以使用单例模式。单例模式通过类本身来管理其唯一实例,在设计这个类的时候,让它只能创建一个实例并提供对此实例的全局访问。因此单例模式有两个基本的条件:(1)确保一个类只有一个实例被创建 (2)提供一个对实例的全局访问指针常见的单例模式的实现常用的单例模式实现方法有两种:饿汉模式和懒汉模式懒汉式单例模式:...原创 2018-05-25 16:22:57 · 358 阅读 · 0 评论 -
Linux下的查询命令
1.whichwhich命令是在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。也就是说,使用which命令,就可以看到系统命令是否存在,以及执行的到底是哪一个位置的命令。命令格式:which + 可执行文件名称which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。2.whereiswhereis命令用于程序名的搜索,而且只搜索二进制文件...原创 2018-05-25 18:54:08 · 370 阅读 · 0 评论 -
Linux下find指令的详解
我们都知道,Linux下一切皆文件,所以对于Linux来说 find 是一条很重要的命令。Linux下面的 find 指令用于在目录结构中搜索文件,并执行指定的操作。它提供了相当多的查找条件,功能比较强大。在不指定查找目录的情况下, find 会对整个系统进行遍历。即使系统中含有网络文件系统,find 命令在该文件系统中同样有效。在运行一个非常消耗资源的 find 命令时,很多然都倾向于把它们放在...原创 2018-05-25 18:51:04 · 481 阅读 · 0 评论 -
Linux下查看文件内容的命令和工具
在Linux下如果我们想要查看一个文件里面的内容,除了用编译器将其打开查看之外,Linux还提供了几条命令,可用不用打开文件就能把文件内容输出到显示屏上进行查看。1.catcat命令主要用来查看文件内容,创建文件,合并文件,追加文件等。1.1、查看文件格式:cat 文件名称说明:这条命令会把文件内容全部输出到显示屏上。cat -n 文件名称:查看文件内容,并对每一行进行编号。cat -b 文件名称...原创 2018-05-26 15:30:09 · 3524 阅读 · 0 评论 -
进程间通信——消息队列(Message queue)
在Linux中,IPC消息队列是一个双向通信的全内存设计,即内核保证了读写顺序和数据同步,并且是性能比较好的先进先出的数据结构。消息队列的应用场景:比如异步任务处理,抢占式的数据分发,顺序缓存区等。消息队列的产生原因消息队列其实就是消息传输过程中保存消息的容器,既然有了管道,为什么要出现消息队列呢?理由如下:(1)生命周期:匿名管道和命名管道都是随进程的,意味着管道的生命周期是随进程的退出而退出的...原创 2018-04-16 10:34:06 · 2340 阅读 · 0 评论 -
进程间通信——共享内存(Shared Memory)
共享内存是System V版本的最后一个进程间通信方式。共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任...原创 2018-04-16 16:19:17 · 151419 阅读 · 35 评论 -
Linux入门
Linux一切皆文件Linux文件类型:1、普通文件(regular file)第一个字符为[ - ]2、目录(directory): 第一个字符为[ d ]3、连接文件(link)第一个字符为[ l ]4、设备和设备文件 块设备文件,即一些存储文件,如硬盘、软盘等,第一个字符为[ b ] 字符设备文件,即一些串行端口的接口文件,如键盘、鼠标等,第一个字符为[ c ]5、套接字(sockets)第...原创 2017-03-22 23:05:49 · 366 阅读 · 0 评论 -
Linux 中的find指令
find是linux 命令,它将档案系统内符合 expression 的档案列出来。Linux下find命令提供了相当多的查找条件,你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。原创 2017-03-26 13:41:43 · 273 阅读 · 0 评论 -
Linux 下的粘滞位
文件的粘滞位(sticky)位是作什么用的? 普通文件的sticky位会被linux内核忽略,目录的sticky位表示这个目录里的文件只能被owner和root删除 粘滞位(Sticky bit) 如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。粘滞位出现执行许可的位置上,用t表示,设置了该位后,其它原创 2017-03-26 15:47:52 · 354 阅读 · 0 评论 -
初步认识僵尸进程和孤儿进程
一、僵尸进程 僵死状态是一个比较特殊的状态:当子进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收。现在我们来用代码模拟一下僵尸进程:运行结果:原创 2017-05-01 10:32:06 · 320 阅读 · 0 评论 -
linux-PCB 之 task_struct
task_struct结构描述 1. 进程状态(State)原创 2017-04-14 21:12:44 · 230 阅读 · 0 评论 -
配置vim编辑器
vim介绍:首先vim是一款很强大的编辑器,它的功能肯定会超出你的想象。所以相对的,它需要你掌握的东西也会很多很多,接下来我就介绍一些平时常用的一些配置。我所介绍的是没有使用插件的配置文件,只需将文件写入你的.vimrc中即可。 说到这里,就先来说一下vim的配置文件,当你的系统中安装了vim编辑器后,就会有一个默认的.vimrc文件,它里面就是你vim默认的一些格式,如果你的原创 2017-04-03 13:24:29 · 447 阅读 · 0 评论 -
linux 下生成进度条
首先创建一个文件: touch test.c然后 vim test.c 进入编辑,编写进度条的C代码,如下图:然后,保存退出。gcc 进行编译:gcc -E test.c -o test.igcc -S test.i -o test.sgcc -o test.s -o test.ogcc test.c 最后生成可执行的目标文件 a.out运行目标文件 ./a原创 2017-04-03 14:39:12 · 341 阅读 · 0 评论 -
初识Linux
首先,我们介绍一下chmod指令,chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或者目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。linux系统中的每个文件和目录都有访问权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为只读、只写、可执行三种。以文件为例,只读权限表示只允...原创 2017-11-12 11:49:13 · 287 阅读 · 0 评论 -
Linux下的进程控制块task_struct结构体
1.什么是进程(1)进程是程序执行的一个执行的实例;(2)进程是正在执行的程序;(3)进程是能分配处理器并由处理器执行的实体;按内核的观点来谈进程:它所担当分配系统资源(CPU时间,内存)的实体。进程的两个基本元素如下:1).程序代码(可能被执行相同程序的其它进程共享)2).和代码相关联的的数据集(关联的的数据集指的是数据段和进程控制块)进程是一种动态描述,但是并不代表所有的进程都在运行。进程在内...原创 2018-03-19 11:24:49 · 601 阅读 · 0 评论 -
Linux下软件安装的几种方式
1.源码安装源码的安装步骤是:编译源码,然后安装1.1安装准备:首先用yum安装gcc,用于编译源码官网下载源码包winSCP windows与linux传输文件(如果直接用要安装软件的linux电脑下载就不用传输了)1.2安装过程:解压进入解压后的目录配置软件./configure #大多数情况下源码包都会带configure这样一个配置工具,具体使用方法可以vim查看其内容make #编译源...原创 2018-03-19 16:19:06 · 222 阅读 · 0 评论 -
常见进程调度算法总结
一、定义进程调度也称为低级调度,它所调度的对象为进程(或者内核级线程),而进程调度算法主要有以下几种:先来先服务调度算法短作业优先调度算法高优先权调度算法基于时间片的轮转调度算法多级反馈队列调度算法二、调度算法介绍1.先来先服务调度算法(FCFS)简介:先来先服务调度算法是一种最简单的调度算法,可用于作业调度,也可用于进程调度。原理:在进程调度中采用先来先服务算法的时候,每次调度就从就绪队列中选一...原创 2018-03-19 17:26:56 · 2810 阅读 · 0 评论 -
孤儿进程和僵尸进程常见面试知识点
1、基本概念 我们知道在linux中,正常情况下,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()取得子进程的终止状态。 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被in...原创 2018-03-19 21:07:51 · 483 阅读 · 0 评论 -
vim下操作快捷键
前言:以前的VS图形界面用习惯了,突然用vim感觉特别不得心应手。于是把整理的linux下vim的命令分享给大家,有了这些快捷键相信大家在linux下学习会很快捷方便。一、移动光标 1、左移h、右移l、下移j、上移k 2、向下翻页ctrl + f,向上翻页ctrl + b 3、向下翻半页ctrl + d,向上翻半页ctrl + u 4、移动到行尾$...原创 2018-03-22 10:07:34 · 340 阅读 · 0 评论 -
死锁和产生死锁的四个必要条件以及如何避免和预防死锁
什么是死锁如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程就是死锁的。死锁出现的场景(1)多个线程:彼此申请对方资源而导致的死锁。A申请B的资源时,因为资源被占用,A会被挂起等待B释放资源,同时B申请A的资源,因资源被占用B挂起等待A释放资源,而AB都处于挂起状态又无法释放资源,便形成了死锁。(2)单个线程:A有自己的资源,但还要申请新的资源,...原创 2018-08-08 15:43:38 · 24983 阅读 · 0 评论