![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
一纸一清风
滋滋有味的学习 津津有味的生活
展开
-
操作系统——进程
操作系统首先我先谈一下我关于操作系统的理解,操作系统本身就是一个比较大的进程,他对下负责管理计算机的软硬件以及为软件提供良好的运行环境,对上和用户进行交互。用户通过shell命令操作系统调用接口,系统调用接口又连接着操作接口,操作接口下则是驱动软件,驱动软件负责调用系统的各种硬件。所谓的操作系统,就是用户和内核之间的一层壳,因为用户直接使用内核可能会发生各种不可预料的事情,这才有了操作...原创 2019-03-31 18:15:03 · 515 阅读 · 1 评论 -
进程和线程的区别
进程和线程的区别进程,是计算机中的程序关于某数据集合上的一次活动运行,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。他的执行需要系统分配资源创建实体之后,才能进行。Linux中的线程不是真正的线程,Linux中的线程是轻量级进程1).二者的相同点在系统层面,二者具有的状态都非常相似,所以在多任务程序中,子进程(子线程)的调度一般与父进程(父线程)平等竞争。2).实现...原创 2019-08-12 15:39:34 · 84 阅读 · 0 评论 -
信号
信号概念信号就是用来通知打断当前操作,告诉他某件事情发生了,去做另一件事信号的实质PCB表中的两个位图和指针数组这两个位图是 blocked 阻塞位图 pending 未决位图 handler 信号递达指针在这之前,我们需要了解一下什么叫信号的递达,信号的未决,信号的阻塞信号的递达就是对信号进程处理 信号的未决就是指信号从产生到递达的过程就叫未决 信号的阻塞不是指信号等...原创 2019-08-16 10:23:27 · 105 阅读 · 0 评论 -
线程
Linux下的线程是用PCB模拟实现的,因此Linux下的线程又称为轻量级进程,同一个进程下的所有线程共享进程下的大部分资源线程概念在一个程序里的一个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟...原创 2019-08-16 15:17:41 · 112 阅读 · 0 评论 -
线程控制
我们首先要知道Linux下没有真正的线程,Linux下的线程其实是轻量级进程,所以系统也没有为我们提供创建线程的相关接口,但是有大佬帮我们封装了一套 thread 库,使用时直接include<pthread.h> ,在使用时也需要-lpthread 链接库线程控制1.创建线程//功能:创建一个新的线程//原型int pthread_create(pthread_...原创 2019-08-16 19:44:59 · 98 阅读 · 0 评论 -
线程间的同步与互斥
进程线程中的互斥需要临界资源:多线程共享的资源流就是临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成互斥锁mutex大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,...原创 2019-08-17 08:27:37 · 421 阅读 · 0 评论 -
死锁的产生与预防
死锁在多线程中,为了保证线程安全,我们会使用互斥锁,在某些进程或者线程中,使用了某些资源,为了完成任务,需要请求某些进程或线程所拥有的资源,从而形成了永久性等待状态死锁产生的四个必要条件1.互斥条件:一个资源每次只能被一个执行流执行2.请求与保持:一个资源想要获取资源时阻塞,不会释放已有资源3.不可剥夺条件:一个执行流获取资源后,在未使用完前,不能强行剥夺4.环路等待条件:...原创 2019-08-17 08:48:41 · 113 阅读 · 0 评论 -
生产者与消费者模型
我在在使用条件变量的时候,如果有很多线程等待在同一个条件变量上,那么当条件满足的时候,唤醒的可能不是我们需要的那个线程,所以我们应该让不同的角色等待在不同的条件变量上,区分唤醒生产者与消费者模型生产者与消费者模型不属于23中设计模型中的一种,它只是一种编程的思想简明来说,所谓生产者与消费者模型其实就是两种角色,三种关系在生产者与消费者中保证这三种关系的实现,才能保证数据的安全...原创 2019-08-17 10:50:31 · 143 阅读 · 0 评论 -
线程池及模拟实现
线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量线程池的应用场景1.需要大量的线程来完成任务,且完成任务的事件比...原创 2019-08-17 14:39:45 · 189 阅读 · 0 评论 -
设计模式----单例模式
设计模式大佬们提供的一些面对经典的常见场景,所给定的一些对应的解决方案单例模式特点比如说,某些类,就只能拥有一个对象实现方式懒汉模式在需要用到这个对象时再实例化出对象懒汉模式的核心思想就是“延时加载”,从而能够优化服务器的启动速度实现template <typename T>class Singleton { static T* inst;...原创 2019-08-17 14:56:37 · 94 阅读 · 0 评论 -
详解IPC中的管道和共享内存
管道分类:命名管道和匿名管道命名管道:可以用于本机上的任意进程间通信 匿名管道:只适用于拥有亲缘关系的进程间通信本质:是内核中开辟的一块缓冲区特性:读写特性:当一个进程读或者写时,其他进程不能读或者写 自带同步与互斥 半双工通信:数据只能向一段发送数据,若要双方通信,则要使用两个管道 提供字节流服务 生命周期随进程匿名管道原型int pipe(int fd...原创 2019-08-15 17:20:14 · 272 阅读 · 0 评论 -
进程间通信
什么叫IPC其实就是操作系统为用户提供的进程间通信的方式操作系统为什么要给用户提供进程间通信呢?这是因为进程之间的独立性,每个进程独享一份代码空间和内存地址那么为什么要提供多种IPC呢这是为了应对不同的场景IPC的本质其实就是一块共享的内存区域进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程...原创 2019-08-15 15:27:21 · 101 阅读 · 0 评论 -
Linux下的重要目录
Linux下一些重要的目录首先,我们要知道,Linux是一个开放的操作系统,磁盘上的文件和目录被组成一颗目录树,每个节点都是目录或文件,如果每个人都想要针对自己的习惯去配置文件放置的目录,就会造成很多的困扰,于是,这就有了Filesystem Hierarchy Standard(FHS)标准这个标准并没有规定我们所有的文件应该放在哪里,这是规定了一些大致的方向,于是就有了一些Linux中...原创 2019-03-30 20:34:26 · 217 阅读 · 0 评论 -
Linux - PCB task_struct结构体
task_struct的结构描述1. 进程状态(州)进程执行时,它会根据具体情况改变状态。进程状态是调度和对换的依据.Linux中的进程主要有如下状态,如表4.1所示。 内核表示 含义 TASK_RUNNING 可运行 TASK_INTERRUPTIBLE 可中断...转载 2018-11-14 23:12:45 · 286 阅读 · 0 评论 -
操作系统的内存管理
在早期的计算机中,程序是直接运行在物理内存上的,也就是说,程序在运行时所访问的地址都是物理内存。当然,如果计算机同时只运行一个程序,那么只要程序要求内存空间不要超过物理内存的大小,就不会有问题。但事实上为了更有效地利用硬件资源,我们必须同时运行多个程序,正如多道程序、分时系统和多任务一样,当我们能同时运行多个程序时,CPU地利用率将会比较高,那么,如何将计算机上有限地物理内存分配给多个程...原创 2019-07-17 16:20:51 · 257 阅读 · 0 评论 -
深入分析父子线程、进程终止顺序不同产生的结果
一、线程Linux线程创建函数为pthread_create(),默认规则是谁创建子线程,谁就要负责子线程的资源回收,当父线程退出后,子线程也随着退出。所以,一般情况下,父线程退出时都要确保子线程已经退出,所以会使用pthread_join()函数阻塞等待子线程的退出信号/标识。pthread_detach(threadid)函数的功能是使线程ID为threadid的线程处于分离状态(可以为非...原创 2019-08-08 17:37:33 · 611 阅读 · 0 评论 -
CloudBackUp
项目介绍该项目可以完成对一个指定目录下的文件进行监控,并将数据上传到云服务器上进行备份和下载功能。1. 客户端对指定目录进行监控,对每个文件生成etag信息,鉴别是否需要备份 2. 客户端将需要备份的文件基于http协议的PUT请求上传到服务器端 3. 服务端对于PUT上传的文件进行备份到指定目录下 4.服务端对于热度较低的文件进行压缩存储,并在文件被请求时进行解压缩处理5...原创 2019-08-08 18:24:40 · 422 阅读 · 0 评论 -
Linux下常用工具
先贴一个链接,可以快速一键将你的vim打造成功能强大的IDE ,全小白操作https://gitee.com/HGtz2222/VimForCpp?tdsourcetag=s_pctim_aiomsg在Linux操作系统中,我们使用yum来安装工具,这里我只说几个最常用的指令yum install package1 安装指定的安装包package1yum update pac...原创 2019-08-10 08:39:09 · 123 阅读 · 0 评论 -
一键将你的Vim打造成C++ IDE
前一段时间为了打造给我的vim增加功能,发现很多博客都写得很乱,完全不告诉这样做的原因,后来,我找到了一个项目,完全傻瓜式操作,脚本服务,一键OK,而且功能强大,所以特来推荐一下,下面附上链接https://gitee.com/HGtz2222/VimForCpp?tdsourcetag=s_pctim_aiomsg...转载 2019-08-10 15:55:01 · 1953 阅读 · 1 评论 -
fork()之后,发生了什么?
我们都知道,在Linux中调用fork()函数,会创建一个子进程,那么在创建这个子进程的过程中,发生了些什么事情?首先,我们要知道,fork()函数其实是调用发起_fork()系统调用,控制权由用户态转为内核态,内核会分配新的内存块和内核数据结构给子进程(也就是PCB task_struct结构体),然后内核会将父进程的部分数据内容以二进制形式拷贝到子进程,下来再将所谓的子进...原创 2019-08-14 20:58:11 · 1355 阅读 · 0 评论 -
wait()和waitpid()区别
我们知道,wait()和waitpid()都是进程等待的函数,那么为什么要进行进程等待呢?进程等待的必要性子进程退出时,父进程如果不管不顾,那么子进程就会变成僵尸进程,造成内存泄漏如果进程变成僵尸进程,那么连kill -9都无法干掉进程,因为谁都无法杀死一个1已经退出的进程这是因为子进程需要保存自己的进程状态,需要告诉父进程你交给我的任务完成的怎么样了,而这些信息就保存在PCB中,...原创 2019-08-15 12:24:28 · 259 阅读 · 0 评论 -
一键升级你的g++版本到7.3
使用 devtool 升级 g++ 到 7.3 版本 以下命令在 root 下使用 yum install centos-release-scl -y yum install devtoolset-7 -y 以下命令添加在 bashrc 中 source /opt/rh/devtoolset-7/enable 要是有人不知道bashrc文件是什么在你的home目...原创 2019-08-28 17:23:22 · 298 阅读 · 0 评论