- 博客(21)
- 收藏
- 关注
原创 进程间通信之systemV信号量(semget semop semctl相关操作)
一、什么是信号量?信号量的本质就是计数器,记录临界资源的数目,用来协助进程同步互斥的访问临界资源。为什么不在进程中定义一个全局变量作为计数器呢?两个进程间的地址空间是各自独立的,各自有各自的虚拟内存空间。多进程之间不能看到各自进程中的全局变量。(进程间的虚拟内存https://blog.youkuaiyun.com/jane_yao/article/details/81635979)既然多个进程都能对信号...
2018-08-30 12:30:08
887
原创 Linux内核中信号
信号的产生:信号的产生可以分为四种方式,不论是哪种方式都是操作系统发送的信号1.通过终端按键产生(键盘中的Ctrl+c Ctrl +v Ctrl +\操作前台进程 )按键后进程立即终止,并core dump(核心转储)。核心转储就是进程在异常终止之前操作系统将进程当前进程在内存中的有效数据转储到硬盘中,并在进程的当前目录产生一个core+进程pid的文件以便于事后调试。如果没有产生...
2018-08-28 16:01:01
745
原创 用带头结点的单链表实现生产者消费者模型
一、多线程的售票引发的问题多线程间Linux下线程和线程共享全局变量、代码段、数据段、文件描述符表,这么多的临界资源在使用时也可能会带来一些麻烦例如:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <pt...
2018-08-27 23:24:58
339
原创 进程与线程之间的区别和线程相关操作
线程与进程有许多相似的地方,也有很多不同的地方,最好将他们对比学习一、线程的概念1.1线程的定义线程是在进程内部执行的执行流,进程就是只有一个执行流的线程,也是操作系统最小操作单位 。1.2线程与进程的不同1.进程间有亲缘关系,线程创建的主线程和新线程之间都是对等的。2.线程是在进程的地址空间内运行的,所以创建一个进程除了创建pcb还要创建资源(虚拟地址空间,页表、内存中的...
2018-08-16 22:00:32
197
原创 用管道消息队列共享内存实现进程间通信
一、进程间通信的目的因为进程的地址空间都是相互独立的,为了实现进程间的数据传输、资源共享、进程控制(如gdb调试)、通知事件等二、进程间通信的方式进程间通信的方式有非常多种,本文仅介绍管道中的匿名管道和命名管道和system V中的消息队列共享内存2.1管道内核中的一块缓存,两个用户态通过这段内核态的缓存进行数据传输匿名管道:使用int pipe(int pipefd[2]...
2018-08-15 23:13:52
1419
原创 一个程序崩溃了?其他运行的程序怎么没有受影响?多亏了虚拟存储
先看一个奇怪的例子:#include <stdio.h> #include <unistd.h> ...
2018-08-13 23:14:18
531
原创 一篇文章带你熟悉操作系统中进程描述、组织、创建、等待和终止
一、背景知识1.1冯诺依曼体系说到操作系统就不能不知道“冯诺伊曼体系”所有的输入、输出设备都只能和内存直接沟通,即外设要输入或输出数据只能写入内存或者从内存中读取。1.2操作系统(OS)大致包括内核(内存管理、进程管理、文件管理、驱动管理)和其他程序(函数库、shell程序等)。目的:向上为用户程序提供良好的执行环境,适当暴露一些接口;向下与硬件交互,管理所有的软硬...
2018-08-10 22:43:03
1160
原创 不能不知道的常用Linux指令
目录一、ls 二、pwd三、cd四、touch、rm 五、mkdir、rmdir六、man 七、cp八、mv九、cat 十、more十一、less十二、head、tail 十三、find十四、grep十五、zip/unzip十六、tar一、ls功能:列出当前目录下所有的文件和目录。还可查看除文件的文件名之外的其他信息。用法...
2018-07-20 16:00:15
199
原创 继承相关
通过继承可以很好的实现复用。每个类中相同的部分就可以定义为基类(父类),通过使用public、protected、private三种继承关系派生类(子类)在父类的基础上又有一些新的成员。一、继承方式与访问限定符三种继承方式与三种访问限定符就出现了九种组合。继承方式和访问限定符继承方式/访问限定符基类中public成员基类中protected成员基类中private成员publicpublic成员p...
2018-05-10 10:21:49
200
原创 Linux虚拟机连不上网?别着急,先试试这个
在VMware上安装的centOS6.5因为之前许多插件都不能安所以又下了一个centOS7。自己本机的网络好好的,centOS6.5也能连上网,新虚拟机却怎么也连不上网。百度了很多复杂的方法都没有解决,最后找到问题后很轻易就的解决了。Application中找到Setting(设置) 2.setting(设置)中点开Network(网络)。wired(有线)要保持开(on)的状态!!! ...
2018-04-27 22:35:59
16489
1
原创 动态内存管理了解一下?
一、C语言中的malloc、calloc、realloc C语言中malloc是用来分配内存的。malloc返回一个指向所分配空间的空指针,或者如果没有足够的内存空间就返回NULL,参数num是要开辟的字节数。calloc在内存中分配一个数组,并初始化为0。calloc返回一个指向所开辟空间的指针,开辟不成功返回NULL参数num是元素的个数,size是各元素的字节数。relloc重新分配内存 ...
2018-04-07 16:42:05
251
原创 C++中的const、静态成员、内联函数和友元
一、constC语言中const就是一个容易让人迷惑的关键字 1.const int p; 2.const int *p; 3.int const *p; 4.int *const p; 5.const int *const p; 6.int const *const p; 第一个好分辨是常量整数,后5个有一种较容易的辨别出来:从右向左,遇到p就换...
2018-03-29 17:14:05
360
原创 空类的大小
一、类的大小是类中所有成员变量大小之和,而且像结构体一样要遵循内存对齐的规则。内存对齐原因是用空间换时间的做法,CPU将内存看做一块一块的,一块可以是2、4、8、16个字节,读取时必须按照块读取。如果有内存对齐遵循内存对齐虽然浪费了空间但可以提高访问速度。还有平台的的原因:不是所有的硬件平台都能访问任意地址的任意数据,某些硬件平台只能在某些地址中取特定类型的数据,否则就会出错。二、如果一个袋子是空...
2018-03-21 19:44:22
1343
原创 C++中的引用
1.引用的用法 创建一个对象的引用只用把声明写成&val的形式就可以了,例如 int a = 10; int &val = a; 创建了一个变量a 初始化为10,又给a起了一个“别名val,通过“别名”操作对象时,就相当于直接对a 进行操作。2.引用的特点 一个变量可以有多个引用。 使用引用必须初始化。 引用在初始化时就唯一确定了,不能再变成其他变量...
2018-03-16 11:16:24
192
原创 可变参数的实现
可变参数可以让函数接受一个以上的任意多个参数,可变参数又是怎么实现的呢?看看源码定义一个指向参数个数的指针va_list._INTSIZEOF(n)这个宏用来求取变量所占内存空间的大小。假如n为int类型((4)+4 - 1&~((4) - 1 ))即7&~30011取反为1100按位与0111变成0100(4)。_ADDRESSOF(v)就是(&v)。完成
2017-11-17 19:54:15
307
原创 一个让非洲人也不那么非的扫雷
1.扫雷要是第一次就被炸死,那游戏体验就会非常差。但真的有人就是这么非,就能第一次就踩到雷的话怎么办?把雷移走。2.将雷都初始化为字符1,非雷都初始化为0.若没有踩到雷,则统计周围雷数。问题是要是周围统计出有一个雷也是字符1,怎么和踩到雷的 '1'区分呢?最好定义两个数组,一个是雷,一个是显示。显示用来展示统计出的雷数。3.初始化雷阵时需比本身雷阵上下左右各多一行,防止在最外侧一周...
2017-11-02 11:43:55
278
原创 关于c语言操作符
一、分类算术操作符移位操作符位运算符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号操作符下标引用、函数调用和结构成员二、注意事项各操作符的作用就不在此赘述,但一些很小的点需要多加注意。1.%操作两边的操作数必须为整数。2./操作中若为浮点数除法则两操作数中至少有一个为浮点数。3.>>操作可分为算术右移和逻辑右移两种。 以-1为例。 算术右移左边补符号位 逻辑右移左边补04.
2017-10-19 11:27:56
262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅