操作系统
Hxingwei
这个作者很懒,什么都没留下…
展开
-
操作系统——信号(1)
信号概念:Linux系统响应某些状况而产生的事件,进程在接受到信号后采取相应的动作。 就比如说,当我们在写博客时,突然被某位朋友叫去帮忙,而停止了我们正在写博客这件事,而帮该朋友完后,我们再继续回来写博客。 而这个这位朋友叫我们,这就是信号。 在操作系统中,进程在受到某些信号的影响后,也会做出相应的动作,而信号有些是人为的,有些是系统为的。 产生信号: 1.键盘事件 2....原创 2018-05-18 16:10:19 · 1532 阅读 · 0 评论 -
操作系统——信号(2)
操作系统中,信号的产生可以告诉系统要去执行某个操作。操作系统中有默认的信号处理函数。我们也可以更改默认的信号处理函数,由我们自己写。——信号捕捉我们先来看看信号在内核中是怎样的: 信号对于操作系统来说,分为3类: 1.阻塞信号 2.未决信号 3.忽略每个信号都有两个标志位分别为阻塞(block)和未决(pending),还有一个函数指针表示处理动作。 信号产生时,内核在进程控...原创 2018-08-04 12:34:46 · 516 阅读 · 0 评论 -
Linux——进程间通信——信号量
信号量是进程间通信方式的其中一种,那么为什么存在信号量这种机制呢?信号量主要应用于同步互斥操作,先来了解一下,同步和互斥是什么? 同步:多个进程需要相互配合才能完成一项任务 互斥:1.由于各个进程都要访问共享资源,而且这些资源需要排它使用,因此各个进程间需要竞争使用这些资源,我们将这种关系称为进程的互斥。 2.系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或者互斥资源 3...原创 2018-07-31 14:33:09 · 322 阅读 · 0 评论 -
Linux——线程 二 (等待与分离)
线程等待: 为什么需要线程等待? 1.已经退出的线程,其空间没有被释放,仍然在进程的地址空间内 2.创建新的线程不会复用刚才退出的线程地址空间我们知道进程内至少有一个线程作为执行单位,当我们进程退出了,意味着我们的线程也退出了。但是进程内有多个线程时,我们只想结束掉其中的某一个线程时,我们该如何做呢?系统为我们提供了下面几种方式: 1.从线程函数中直接调用 return ,这种方法对主...原创 2018-07-31 16:20:49 · 210 阅读 · 0 评论 -
Linux内核中,进程的七种状态
Linux内核中,运行一个进程,会因为各种因素,进程会处于何种状态。 有如下几种状态:1.用户运行态:用户层面,由用户执行程序,执行与等待结果过程。2.运行态:CPU处理进程任务并返回运行结果3.僵尸态:进程运行完,但是没有进行资源回收,编程僵尸进程4.可中断睡眠:可中断的睡眠状态的进程会睡眠直到某个条件变为真,如产生一个硬件中断、释放进程正在等待的系统资源或是传递一个信号都可以...原创 2018-08-06 13:16:44 · 4272 阅读 · 0 评论 -
Linux——线程 三 (互斥量)
我们都知道每个线程都有自己独立的栈空间,自己使用的变量地址也在栈空间内。但是有时候,线程访问的变量都需要线程共享,这些变量称为共享变量,通过数据共享完成线程之间的交互。 我们在进程中了解到,多个进程同时访问一个共享变量的时候,会引发很多问题。所以进程之间需要访问共享变量的时候,需要互斥。而对应的,我们线程访问共享变量,也需要这样的互斥操作。我们从一个卖票系统看看,如果没有使用互斥相关操作...原创 2018-08-01 18:56:21 · 209 阅读 · 0 评论 -
Linux——读写锁
Linux下,为了线程安全,为我们提供了很多种锁。读写锁: 我们在编写多线程的时候,我们可能需要经常去读取某个共享数据变量,但是相对要改写这个变量的机会相对较少。在读的过程中,往往伴随着查找的操作,中间耗时很长,给这种代码加锁,会极大的降低我们程序的效率。所以提出了读写锁。注意:写独占,读共享,写锁优先级高例子:4个读线程,4个写线程#include<stdio....原创 2018-08-01 20:17:39 · 1504 阅读 · 1 评论 -
操作系统——生产者消费者模型
生产者消费者模型在操作系统中,是很常见的模型之一。它们之间的关系,生产者负责生产产品,消费者负责消费产品。 “产品”是它们的关联属性。 依照我们的操作系统理念。这个产品就是共享区。 我们把这块共享区设置成队列,内存块,都是可以的,我们把该共享区称为“仓库”。看一下模型: 生产者消费者模型中,最重要的性质: 1.生产者与消费者是同步的关系 2.生产者与生产者之间是互斥的关系 3....原创 2018-08-03 10:31:44 · 1242 阅读 · 0 评论 -
Linux——线程 四 (信号量)
线程中的信号量和进程中的信号量的作用相同,都是用于同步操作,达到无冲突的访问共享资源的目的。但是它们也是有一定的区别的。线程中的信号量通过参数的不同,也可以在进程间使用。 和semget() 函数创建的信号量不同,线程中的信号量可以使两个线程进行同步。我们先看一下线程中信号量的API及其参数: #include <semaphore.h>1.定义信号量 sem...原创 2018-08-03 11:44:24 · 273 阅读 · 0 评论 -
操作系统——kill - l
操作系统中 各个信号 代表的含义:1) SIGHUP 终端的控制进程结束,通知session内的各个作业,脱离关系 2) SIGINT 程序终止信号(Ctrl+c)3) SIGQUIT 和2号信号类似(Ctrl+\),产生core文件4) SIGILL 执行了非法指令,可执行文件本身出现错误 5) SIGTRAP 有断点指令或其他...原创 2018-07-30 17:32:32 · 5798 阅读 · 0 评论 -
操作系统——ulimit
—————————————————–自己总结了一下,方便看看各个选项的功能:—————————————————–ulimit [-acdfHlmnpsStvw] [size]ulimit 是一个计算机命令,用于shell启动进程所占用的资源,参数形式有-H设置硬资源限制; -S 设置软资源限制;-a 显示当前所有的资源限制等[root@localhost luo]# ulim...原创 2018-07-30 17:00:36 · 435 阅读 · 0 评论 -
Linux——线程 一
什么是线程? 在一个程序里的一个执行路线就叫做线程(线程是一个进程内部的控制序列) 一切进程至少都有一个执行线程 进程和线程区别? 进程是资源竞争的基本单位 线程是程序执行的最小单位 线程共享进程数据,但也拥有自己的一部分数据 如:线程ID,一组寄存器,栈,调度优先级,信号屏蔽字,errno 多个线程平分进程的一栈 进程中...原创 2018-07-30 14:56:01 · 169 阅读 · 0 评论 -
操作系统及一些简单指令
操作系统: 管理计算机软硬件资源的系统软件。 内核(进程管理,内存管理,文件管理,驱动管理) 其他程序(例如函数库,shell程序等等)我们是用户,需要通过指令去完成我们的需求,以下是一些重要的指令: 创建目录 mkdir 删除目录 rmdir(只能删除空目录) 创建文件 touch 删除文件 rm...原创 2018-07-16 19:21:24 · 2070 阅读 · 0 评论 -
Linux——程序,进程
程序 :是完成特定任务的一系列指令集合进程 从用户角度看,进程是程序的一次动态的执行过程 从内核角度看,进程是分配CPU,内存等系统资源的基本单位。每一个进程都有自己独立的地址空间和运行状态 进程是系统分配资源的最小单位进程是程序的一次动态执行过程,需要对进程的现场信息进行维护,就需要相应的数据结构,对应的C语言的结构体,这个结构体叫PCB(proces...原创 2018-07-17 11:04:32 · 201 阅读 · 0 评论 -
Linux——进程的地址空间
环境变量环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数环境变量是具有全局性的,通过环境变量我们看看Linux下进程的地址空间管理。 1 #include&lt;stdio.h&gt; 2 #include&lt;stdlib.h&gt; 3 #include&lt;unistd.h&gt; ...原创 2018-07-17 15:09:30 · 162 阅读 · 0 评论 -
Linux——进程等待
进程等待必要性1.子进程退出,父进程如果不知道子进程退出,就可能造成“僵尸进程”的问题,这就是内存泄露。 2.一旦子进程变成了僵尸进程,KILL - 9也无能为力,没有办法去杀死一个已经死去的进程 3.子进程是父进程为了完成任务而生成的,派发给子进程的任务是否完成了,完成的怎么样,父进程都不知道。父进程需要知道该情况。 4.父进程通过等待的方式,回收子进程的资源,获取子进程退出信息...原创 2018-07-28 18:10:27 · 256 阅读 · 0 评论 -
Linux——进程间通信——管道
进程间通信目的: 1.数据传输:一个进程需要将它的数据发送给另一个进程 2.资源共享:多个进程之间共享同样的资源 3.通知事件:一个进程需要向另一个或者一个组进程发送消息,通知它发生了某种事件 4.进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道: 1.匿名管道 2.命名管道我们下面看看匿名...原创 2018-07-29 11:04:42 · 235 阅读 · 0 评论 -
Linux——进程间通信——消息队列
消息队列:看到队列,我们可以想到数据结构中所学到的消息队列,它是由一段连续的空间或者以空间块的形式连接在一起的空间。我们可以想到队列中肯定会有 头指针和尾指针,该指针指向的空间肯定存放着我们想要的数据。那么我们进程间通信的消息队列是如何实现的?我们下面来看。消息队列的定义: 1.消息队列提供了一个进程向另一个进程发送数据块的方法 2.接受的数据块被认为是一个有类型的,所以接受者可以接受不同...原创 2018-07-29 16:23:35 · 308 阅读 · 0 评论 -
Linux——进程间通信——共享内存
server.c#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include&amp;lt;sys/types.h&amp;gt;#include&amp;lt;sys/shm.h&amp;gt;#include&amp;lt;sys/ipc.h&amp原创 2018-07-29 18:34:13 · 252 阅读 · 0 评论 -
Linux——线程 五 (条件变量)
条件变量: 当一个线程互斥的访问某个变量时,它可能会发现自己要完成某个操作需要某个共享变量达到条件。否则会进入阻塞。(就比如说,当前有个判断 : a = 0 ,线程1要执行1/a,需要的条件是a不等于0,现在线程1只能阻塞等待着a变量的改变。 这时需要通过线程2去改变共享变量a的值)我们先看一下条件变量的API:条件变量: 1.定义条件变量:pthread_cond_t cond...原创 2018-08-03 11:59:43 · 235 阅读 · 0 评论