
Linux
LinYang_code
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程安全的单例模式
何为单利模式和设计模式单例模式:就是是一经典的、常见的、常考的设计模式设计模式:根据一些经典常见的场景,给定了一些解决办法,这就是设计模式分类饿汉模式(空间换时间):不考虑线程安全问题—>在程序初始化阶段就完成资源申请初始化代码!!!!template <typename T>class Singleton { static T data;public: static T* GetInstance() { return &data;}};懒汉模式(时原创 2020-08-07 22:36:09 · 205 阅读 · 0 评论 -
死锁和银行家算法的理解
死锁的概念:死锁是指一组进程中的各个进程都占有不会释放的资源,但因相互申请其他进程不会释放的资源而处于一种永久等待状态。(请求与保持 和 循环等待撞在一块)请求与保持通俗来讲:我加了A,然后去加B,如果不能加B,我也不释放A循环等待通俗来讲:我加了A锁,然后去加B锁,对方加了B锁,对方想加A锁。(加锁顺序不当)这样就陷入了一个回路,死锁就产生了。产生死锁的条件(四个缺一不可)1.互斥条件:一个资源每次只能被一个执行流使用2.不可剥夺条件:一个执行流在未释放资源之前,不能强行剥夺3.请求与保持:原创 2020-08-07 22:21:01 · 988 阅读 · 0 评论 -
线程安全与同步互斥
线程安全的实现:同步与互斥同步:通过条件判断实现对资源访问的合理性互斥:通过同一时间只有一个执行流能够访问资源,实现资源访问的安全性互斥的实现—>互斥锁互斥锁概念:就是一个 只有0/1的计数器,描述临界资源的两种访问状态(可访问/不可访问),一个执行流在访问期间需要将资源状态标记为不可访问,访问完毕后,将状态标记为可访问,这些访问同一临界资源的执行流都要在访问资源之前,先去访问互斥锁判断访问状态过程1.定义互斥锁变量:pthread_mutex_t mutex = PTHREAD_MUTE原创 2020-08-07 22:08:03 · 237 阅读 · 0 评论 -
线程的创建、终止、等待和分离
线程控制:包括线程的创建、终止、等待和分离一、线程创建操作系统并没有提供创建线程的系统调用接口,通过库函数创建线程,其实是创建了一个用户态线程,并在内核中创建了一个轻量级进程pcb实现线程的调度pthread_create函数功能:创建一个新的线程原型int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);参数thread:返回线程原创 2020-08-07 22:03:48 · 302 阅读 · 0 评论 -
进程与线程
在学习Linux时,遇到了进程和线程的概念,总是分不清楚,经过学习研究后,将自己的总结写出啦在学习进程时,认为进程是pcb,pcb是操作系统对程序运行动态的描述,通过pcb实现对程序运行的调度管理;在学习线程时,认为pcb是一个轻量级进程,是一个运行中程序的一条执行流。我们在Linux中使用pcb实现了进程中的执行流,一个进程可以有多个pcb,也就是可以有多个执行流,创建线程就是在内核中创建一个pcb作为一条执行流,来实现程序的运行调度管理。所以:进程的概念:进程是操作系统对程序运行动态的描述,在原创 2020-08-07 21:32:26 · 179 阅读 · 0 评论 -
Linux下信号的生命周期
信号概念理解:信号就是一种中断,通知我们发生了某件事情,打断我们当前的操作,让我们去处理这个事情。信号能够通知事件的发生,进程必须能够识别这个信号,并且信号与事件一一对应查看信号:kill -l信号的分类:62种非可靠信号:1~31信号,从Unix就有的信号,每个信号在系统中都有对应的事件,不可靠的,有可能会丢失的事件可靠信号:34~64信号,后来扩充的32种信号,扩充定义的时候并没有具体对应的事件,可靠的不会丢失的事件信号的生命周期,有四个阶段:信号的产生–>信号的注册–>信号的注销原创 2020-08-07 12:04:55 · 429 阅读 · 0 评论 -
进程间通信方式的理解
首先来讲解一下有关此的概念理解进程间通信的原因:因为进程间具有独立性,每个进程都有自己的独立虚拟地址,访问的都是虚拟地址,因此无法直接访问,所以需要操作系统给进程间提供通信方式进程间通信的目的:1.数据传输:一个进程需要将它的数据发送给另一个进程2.资源共享:多个进程之间共享同样的资源。3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件(如进程终止时要通知父进程)。4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程原创 2020-08-07 00:17:27 · 628 阅读 · 0 评论 -
文件系统
我们先来看一下Linux下的磁盘分区:磁盘中的分区:swap:作为交换内存使用。filesystem:文件系统分区,用于文件存储,文件系统分区可以有多个,各自有各自的文件系统由此引入了文件系统这个概念:用于磁盘中文件管理的系统,称为Linux ext2文件系统。磁盘文件系统图:创建一个inode{包含文件的大小、权限信息、实践属性、数据地址、文件元信息}文件系统的参数介绍:Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Grou原创 2020-08-06 20:37:04 · 167 阅读 · 0 评论 -
进程创建、终止和等待
首先我们来看一下进程的创建,有两种方式:fork( )和vfork( )**fork( ):**代码共享,数据独有,是写时拷贝技术代码共享:代码是只读的,不能发生改变数据独有:某一块物理内存中的数据即将发生改变,则给子进程数据重新开辟物理空间,将数据拷贝过来写时拷贝技术:子进程创建出来后,各个虚拟地址在物理内存中的指向完全与父进程相同,提高子进程的创建效率**返回值:**子进程返回0;父进程返回子进程的pid**vfork( ):**父子进程共用虚拟地址空间,父进程阻塞,避免调用栈混乱int原创 2020-08-06 13:40:27 · 310 阅读 · 0 评论 -
操作系统的内存管理方式
操作系统的内存管理方式有三种:分段式、分页式、段页式。首先介绍分段式:**概念:**将地址空间进行分段,代码段/数据段/堆/栈/参数/环境变量。根据使用一个空间的性质,在不同的分段,分配虚拟地址,有助于编译器内存管理**虚拟地址组成:**段号+段内偏移量**过程:**在操作系统中,有一个段表,段表中包含:虚拟段号+物理内存段起始地址,通过虚拟地址中的段号,在段表中找到相应的段表项,得到物理起始地址,加上段内偏移量最终得到物理地址。分页式:**虚拟地址的组成:**页号+页内偏移量**过程:**原创 2020-08-06 12:40:49 · 1228 阅读 · 0 评论 -
虚拟地址空间理解
首先我们来看一下进程的空间分布图来看一段代码:#include <stdio.h>#include <unistd.h>#include <stdlib.h>int g_val = 0;int main(){pid_t id = fork();if(id < 0){perror("fork");return 0;}else if(id == 0){ //child,子进程肯定先跑完,也就是子进程先修改,完成之后,父进程再读取g_val=原创 2020-08-06 10:56:06 · 1106 阅读 · 0 评论