![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 71
小心眼儿猫
这个作者很懒,什么都没留下…
展开
-
僵尸进程与孤儿进程
僵尸进程 与孤儿进程原创 2018-03-18 17:11:00 · 599 阅读 · 0 评论 -
笔记:gdb调试多线程
gdb与多线程在多线程编程时,当我们需要调试时,有时需要控制某些线程停在断点,有些线程继续执行。有时需要控制线程的运行顺序。有时需要中断某个线程,切换到其他线程。这些都可以通过gdb实现。先看一下gdb调试多线程常用命令: 命令 功能 info threads 显示可以调试的所有线程。gdb会为每个线程分配一个ID(和tid不同),编号一般从1开始。后面的ID...原创 2018-04-26 21:22:25 · 345 阅读 · 0 评论 -
从线程视角看生产者消费者模型
生产者消费者模型通常说到生产者消费者模型,就会想到:“3种关系,2个角色,1个交易场所” 3种关系: 1、生产者与生产者之间:互斥 2、消费者与消费者之间:互斥 3、生产者与消费者之间:互斥且同步2个角色: 生产者与消费者1个交易场所: 临界区下面写一个基于链表的生产者消费者例子:#include<stdio.h>#...原创 2018-04-26 17:28:46 · 116 阅读 · 0 评论 -
线程同步与互斥
mutex互斥量 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程。 但有时候很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。 多个线程并发的操作共享变量,会带来一些问题。举个妮子:#include <stdio.h>#include<stdlib.h>#include<string.h原创 2018-04-26 09:15:14 · 131 阅读 · 0 评论 -
线程控制(二):线程等待与分离
线程等待为什么需要线程等待呢? 1、已经退出的线程,其空间没有被释放,任然在进程的地址空间内 2、创建新的线程不会服用刚才退出线程的地址空间pthread_join函数://等待线程结束int pthread_join(pthread_t thread,void **value_ptr);//参数thread:线程ID//value_ptr:指向一个指向线程的返回值的指针//返回原创 2018-04-25 13:42:55 · 480 阅读 · 0 评论 -
线程控制(一):线程创建与终止
说在前面:与线程相关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的,要想使用这些函数,要通过引入头文,链接这些线程函数库时要使用编译器命令的“-lpthread”选项创建线程//创建一个新的线程int pthread_create(pthread_t *threade,const pthreade_attr_t *attr,void *(*start_rout原创 2018-04-25 11:34:42 · 390 阅读 · 0 评论 -
进程间通信(三)---共享内存
共享内存区是最快的IPC形式。一旦这样的内存映射到共享他的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说就是进程不再通过执行进入内核的系统调用来传递彼此的数据。 共享内存示意图 共享内存数据结构struct shmid_ds { struct ipc_perm shm_perm; /* operation perms */ int shm_segsz原创 2018-04-12 23:07:46 · 157 阅读 · 0 评论 -
进程间通信(二)---消息队列
前面我们讲了进程间通信的其中一种方式,进程间通信(一)—管道,现在我们来讲一下另外一种方式就是消息队列。 1: 消息队列提供了从一个进程向另外一个进程发送一块数据的方法。 2:每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。 3:消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数也是有上限的(MSGM...原创 2018-04-12 21:30:47 · 211 阅读 · 0 评论 -
守护进程
守护进程也被叫做精灵进程,是运行在后台的一种特殊进程。 他独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程,Linux的大多数服务器就是用守护进程实现的。比如ftp服务器,ssh服务器,Web服务器http等,同时,守护进程完成许多系统任务,比如,作业规划进程crond等。Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能...原创 2018-04-22 18:33:42 · 120 阅读 · 0 评论 -
进程间关系:进程组、作业、会话
进程组 之前我们在查看系统进程相关信息时,会看到每一个进程的ID和其父进程的ID等相关信息,其中就有一个PGID,代表的是组ID。什么是组ID呢?进程除了有自己的一个进程ID之外,每一个进程还属于一个进程组。而这其中的PGID就是组ID,指明了该进程是属于哪一个进程组。 那么什么是进程组呢?其实这个进程组就是一个或多个进程的集合。通常情况下,他们与同一个作业相关联,可以接收来自同一终端的各种信号原创 2018-04-22 16:41:48 · 1438 阅读 · 1 评论 -
死锁产生条件,如何避免死锁
什么是死锁? 答:多个进程在运行过程中因争夺资源而造成的一种僵局。当一个进程请求资源时,如果该资源不能立即获得,那么进程就会进入等待状态。如果一个处于等待状态的进程 P1,由于所等待的资源被另一个处于等待状态的进程 p2 所占有,而 p2 所请求的资源又被 p1 占有,这样它们所请求的资源都不会获得,两进程一直处于等待状态,形成死锁。死锁产生的原因? (1) 因为系统资源不足。 ...原创 2018-04-21 23:38:06 · 2029 阅读 · 0 评论 -
进程间通信(一)---管道
进程间通信的目的: 1、数据传输:一个进程需要将他的数据发送给另一个进程 2、资源共享:多个进程间共享同样的资源 3、通知事件:一个进程需要向另一个或一组进程发送消息,通知他(他们)发生了某种事件(如进程终止时要通知父进程)。 4、进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道他的状态...原创 2018-04-12 11:22:07 · 448 阅读 · 0 评论 -
同步与互斥,生产者消费者模型基本概念
现代操作系统提供了一个并发控制环境,即系统中同时活动着的多个不同的进程,这些进程共享同一个CPU、内存或 I/O设备。特别是对于Linux操作系统来说,其多任务、多用户、分时实时混合的性质决定了多个进程在某种程度上彼此依赖或相互制约的关系,这些关系我们叫“并发关系”,按其性质可以分为同步(synchronization)和互斥(mutual exclusion)两类。互斥: 由于各进程要求共享资源原创 2018-04-10 23:39:49 · 530 阅读 · 0 评论 -
捕捉信号与可重入函数
之前说过,操作系统会在合适的时候对接受到的信号进行相应的处理。 所谓合适的时候就是:进程从内核态返回至用户态时,会检查信号并进行相应的处理动作。 下面详细说一下到底是怎么一回事 1:当我们执行我们写的一个程序时,可能会因为中断,异常或者系统调用从而进入内核 2:进入内核以后,内核就会处理这些中断,异常或者系统调用,处理完以后,内核就会返回用户态,然而再返回之前,做的最后一件事,就是处理当前进原创 2018-04-10 22:11:44 · 211 阅读 · 0 评论 -
阻塞信号及相关函数
阻塞信号先来看一下几个常见的信号相关概念: 1实际执行信号的处理动作称为信号递达。 2 信号从产生到递达之间的状态称为信号未决。 3进程可以选择阻塞某个信号。 4被阻塞的信号产生时将一直保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。 5注意:阻塞和忽略是不同的,只要信号被阻塞就永远不会被递达,而忽略就是在递达之后,可选择的一种处理动作。在内...原创 2018-04-10 17:57:21 · 646 阅读 · 0 评论 -
信号的概念和信号的产生
信号的概念: 这里提到信号,也有必要说一下信号量,信号量是进程间通信的一种方式,与现在要讲的信号并无关系。这里要区分开来。当操作系统接受到信号以后,会在合适的时候执行相应的动作。在我们的日常生活中,红绿灯是一种信号。而我们由于从小便被人告知,红灯停绿灯行……这种规则,因此,我们首先记住了红绿灯这个东西,随后,因为我们已经知道了红绿灯所对应的规则,当我们在遇到红绿灯时就会做出相应的动作。这里,操作系原创 2018-04-10 16:36:58 · 346 阅读 · 0 评论 -
进程间通信(四)---信号量
信号量主要用于同步和互斥的。 进程互斥: 1:由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程竞争使用这些资源,进程的这种关系就叫做进程互斥 2:系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源 3:在进程中涉及到互斥资源的程序段叫临界区例如: 进程同步 进程同步指的是多个进程之间相互配合共同完成一项任务 比如我们日常生活中的原创 2018-04-15 13:11:17 · 272 阅读 · 0 评论 -
进程的终止和等待
进程终止一般来说,进程的退出场景有以下三种:代码运行完毕,结果正确代码运行完毕,结果错误代码异常终止常见的退出方法:从main函数返回调用exit调用_exit在Linux学习的过程中,我们常用 Ctrl+c来终止我们运行的程序,这就是异常终止 _exit函数#include<unistd.h>void _exit(int status);//...原创 2018-03-23 23:14:13 · 287 阅读 · 0 评论 -
笔记:gdb调试多进程
默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。follow-fork-mode与detach-on-fork 说明: follow-fork-mode det...原创 2018-04-27 00:27:42 · 396 阅读 · 0 评论