操作系统
文章平均质量分 87
Amberda
(ˉ▽ ̄~)
展开
-
Linux中进程描述符task_struct结构体详解
大家都知道进程吧,那么进程到底是什么呢?进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。初学者经常会把进程和程序搞混,注意,程序并不是进程。实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。我们来看看进程与程序的不同:1.存储位置不同,程序在硬盘上,进程在内存里2.进程除了拥有和程序一样的代码,还有PCB,进程比程序多了...原创 2017-04-15 13:49:35 · 1434 阅读 · 0 评论 -
Linux中的内存分配
不同的语言规定的内存分配是不一样的。 “段”是对一个完整的程序而言,也就是从操作系统的角度看 “区”则是对整个内存而言对于一个程序而言:栈:存放局部变量堆:动态开辟的变量,new malloc开辟出的数据段,也就是全局区/静态区 —— 又可以分为已初始化BSS段和未初始化DATA段,注意的是bss段不给该段的数据分配空间,只是记录数据所需空间的大小只读数据区—-存放字...原创 2018-08-21 16:47:43 · 291 阅读 · 0 评论 -
解析僵尸进程和孤儿进程
大家都知道Linux中的进程分为多种状态,例如: “R (running)”运行状态、 “S (sleeping)”睡眠状态(浅度睡眠)、 “D (disk sleep)”磁盘睡眠状态、 “T (stopped)”停止进程、 “X (dead)”死亡状态、 “Z (zombie)”僵死状态等等。 僵死状态是一个比较特殊的状态:当进程退出并且父进程(使用wait()系统调用)没有读取到...原创 2017-04-29 15:07:30 · 478 阅读 · 0 评论 -
浅谈Linux中的线程
1.线程概念 先来看看百度百科对线程的解释: 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有...原创 2017-06-07 10:23:04 · 334 阅读 · 0 评论 -
共享内存
之前我们已经了解了管道和消息队列:http://blog.csdn.net/qq_34021920/article/details/79596262今天我们再来看一种共享内存共享内存 共享内存顾名思义就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存...原创 2017-06-08 22:25:40 · 815 阅读 · 0 评论 -
线程死锁
一、死锁概念 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。 接下来给大家举一个简...原创 2017-06-15 21:24:52 · 401 阅读 · 0 评论 -
Linux中的线程安全和可重入函数
一、线程安全: 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。例如下面这几个函数就被称为线程不安全函数:(1).不保护共享变量的函数(2).保持跨过多个状态调用的函数(3)...原创 2017-06-27 08:47:45 · 334 阅读 · 0 评论 -
Linux---进程控制
一、进程创建1. fork()函数#include <unistd.h>pid_t fork(void);fork()函数从一个进程中创建一个新进程,新进程为子进程,原来的进程为父进程。 创建成功给父进程返回子进程的id,给子进程返回0。 创建失败则返回-1来看段代码感受一下#include <stdio.h>#include <...原创 2018-01-25 16:37:05 · 289 阅读 · 0 评论 -
Linux---进程替换及编写一个自己的shell
进程替换用fork创建子进程后,子进程执行的是和父进程相同的一段程序(但有可能执行不同的代码分支),如果想让子进程执行另一个程序该怎么办呢?这时候就有了exec函数。 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的进程ID并未发生改变。 来看看exec函数家族都有哪些函数?...原创 2018-01-27 14:59:21 · 447 阅读 · 0 评论 -
Linux---文件描述符fd与FILE结构体
之前在学习C++继承和多态的时候对于三个概念理解的不是很透彻,现在对这三个的概念来总结一下重载 overload重载:简单说就是函数名称相同,但是参数列表不相同的情形,这样的同名不同参数的函数互相称之为重载函数。 重载实际上属于多态的一种,是编译时多态即静态多态 来看看重载的条件相同的范围(成员函数重载)函数名相同参数列表不同在这里解释一下参数列表不同可以是以下...原创 2018-01-31 13:54:19 · 636 阅读 · 0 评论 -
进程间通信---管道
进程间通信一般而言,不同的进程看到的那一份公共资源,是由操作系统提供的,任何一个进程的全局变量在另一个进程中都看不到,所以,进程之间要交换数据就需要通过内核,在内核中开辟一块缓冲区,进程一把数据从用户空间拷贝到缓冲区,进程二再从缓冲区把数据读走,内核提供的这种机制就叫做进程间通信 (IPC)。 进程间通信的目的:数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个...原创 2018-03-15 10:59:10 · 311 阅读 · 0 评论 -
进程间通信----消息队列
之前我们已经看过进程间通信的一种方式——–管道了:http://blog.csdn.net/qq_34021920/article/details/79559603 今天我们来再看看进程间通信的另一种方式——–消息队列消息队列消息队列提供了一种从一个进程向另一个进程发送数据块的方法。每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。消息队列与命名管道有一样的不足...原创 2018-03-18 20:35:15 · 335 阅读 · 0 评论 -
进程间通信----共享内存
之前我们已经了解了管道和消息队列:http://blog.csdn.net/qq_34021920/article/details/79596262 今天我们再来看一种进程间通信——–共享内存共享内存共享内存:顾名思义就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可...原创 2018-03-19 20:14:07 · 218 阅读 · 0 评论 -
进程间通信----信号量
继续来看进程间通信的方式——–信号量 (管道、消息队列、共享内存:http://blog.csdn.net/qq_34021920/article/details/79605495)信号量信号量本身是一种计数器,用来衡量临界资源数量的多少。它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件、外部设备)来实现进程间通信。它本⾝身只是一种外部资源的标识。信号量在此过程中负责数据...原创 2018-03-20 16:34:02 · 578 阅读 · 0 评论 -
Linux----详解信号
信号的概念信号是进程间通信机制中唯一的异步机制 来看看在Linux中都有哪些信号 kill -l 命令可以查看Linux中的信号列表 我们可以看到每个信号都有一个编号和一个宏定义名称,这些宏定义可以在头文件signal.h中找到。而且可以发现的是没有32、33号信号。1-31号信号叫做普通信号,34-64号信号叫做实时信号。 在这里对这些信号就不做详细的解释了,可以查看man手册...原创 2018-03-31 21:13:23 · 383 阅读 · 0 评论 -
Linux----线程(同步与互斥)
在之前接触线程的时候,对它还不算特别了解,所以写出的总结就比较浅浅谈Linux线程 今天在之前博客的基础上在重新总结一下。 就不去解释线程的基本概念了,可以戳上面的链接线程相关函数线程创建#include &lt;pthread.h&gt;int pthread_create(pthread_t *thread, const pthread_attr_t *at...原创 2018-04-08 10:31:43 · 351 阅读 · 0 评论 -
基于单链表和基于环形队列的生产者单消费者模型
先来介绍一下生产者消费者模型,举一个常见的例子:生活中,我们会经常去超市买东西,这里涉及到了三个事物:我们、超市、供货商。很容易就可以想到,我们就相当于消费者,而供货商就相当于生产者,那么超市就算是一个交易场所了。对于生产者消费者模型我们可以简单的总结一下叫做 3 2 1原则 3:三种关系2:两个对象1:一个交易场所一个交易场所很容易理解,还有两个对象当然就算生产者和消费...原创 2018-04-09 17:33:01 · 561 阅读 · 0 评论 -
Linux-----进程间关系和守护进程
在学习完进程之后,我们再来谈谈进程间关系 一个正在运行的程序(即进程)有着许多属性,经常用于进程控制的有:实际用户id,有效用户id,设置用户id、组id、进程id、进程组id、会话id。 在这里我们先介绍三个概念:进程组 / 作业 / 会话进程组之前我们说过每个进程都有自己的进程ID,那么进程组是什么呢?其实每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一...原创 2018-04-17 20:55:56 · 328 阅读 · 0 评论 -
gdb调试
要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项gdb常用命令:list/l + 行号:显示源代码,接着上次的位置往下列每次10行list/l + 函数名:显示某个函数的源代码r/run:运行程序n/next:单条执行,相当于VS的F10s/step:进入函数调试,相当于VS的F11break/b + 行号:在该行设置断点break + 函数名:在某个函数...原创 2018-09-02 12:48:28 · 415 阅读 · 0 评论