![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
操作系统和网络
文章平均质量分 81
操作系统部分知识和网络知识点整理
Diligent_wu
这个作者很懒,什么都没留下…
展开
-
生产者与消费者模型的应用:线程池
生产者消费者模型生产者与消费者模型:大佬们针对典型的应用场景设计的解决方案生产者与消费者模型应用场景:有线程不断地产生数据,有线程不断地处理数据。数据的产生与数据的处理,如果放在同一个线程中完成,因为执行流只有一个,那么肯定是生产一个处理一个,处理完一个后才能生成一个。这样的依赖关系太强了,如果处理的比较慢,就会把程序的速度拖慢下来。因此将生产与处理放在不同的执行流中完成,那么生产和处理的线程如何实现通信呢?中间增加一个数据缓冲区(队列),作为中间的数据缓冲场所。产生线程只负责将数据放入缓冲区原创 2022-03-25 16:23:46 · 1542 阅读 · 2 评论 -
线程间通信:信号量
信号量信号量的本质就是一个计数器+pcb等待队列通过信号量可以实现同步和互斥,主要是同步同步的实现:通过自身的计数器对资源进行计数,并且通过计数器的资源计数,判断进程/线程是否符合访问资源的条件。互斥的实现:保证计数器的计数不大于1,就保障了资源只有一个,同一时间只有一个pcb可以访问临界资源,实现互斥。代码操作:1.定义信号量sem_t;2.初始化信号量:int sem_init(sem_t* sem,int pshared,unsigned int value); sem:定义一个信号原创 2022-03-25 14:39:39 · 1273 阅读 · 0 评论 -
进程间通信IPC:管道、共享内存和消息队列
进程间通信(IPC):进程间通信(IPC)是操作系统为用户提供的几种进程间的通信方式。主要因为进程间有独立性(每个进程都有自己的虚拟地址空间,访问的都是自己的虚拟地址,而不是直接访问物理内存),因此无法直接通信,所以才需要操作系统提供进程间的通信方式,实现进程间的通信。操作系统针对不同的通信场景提供了多种不同的通信方式:数据传输(管道/消息队列);数据共享(共享内存);进程控制(信号量);从unix而来的管道;systemV标准的共享内存、消息队列和信号量。管道:本质:内核中的一块缓冲区;多个进原创 2022-03-24 11:25:26 · 1934 阅读 · 0 评论 -
线程安全:互斥量与条件变量
线程安全线程安全:多个执行流对临界资源进行访问,但不会造成二义性线程安全的实现:同步:通过条件判断保证对临界资源访问的合理性互斥:通过同一时间对临界资源访问的唯一性实现临界资源访问的安全性互斥的实现:互斥锁互斥锁实现互斥的原理:互斥锁本身是一个只有0和1的的计数器,描述了一个临界资源当前的访问状态,所有执行流在访问临界资源之前都需要判断当前的临界资源是否可以被访问,如果不允许则让执行流进行等待,如果允许就可以让执行流访问临界资源,但是在访问期间需要将临界资源修改为不可访问状态,这期间如果其原创 2022-03-22 19:16:18 · 349 阅读 · 0 评论 -
线程控制:线程退出、线程等待
线程退出我们来看下面这段代码,运行之后:为什么没有走进普通线程的循环,而是退出了呢?这就就要说的第一点:主线程main中return 0 退出的是进程,不是线程!线程退出接口:void pthread_exit(void* retval);谁调用谁退出,retval是退出返回值;使用pthread_exit()接口退出主线程,不会导致普通线程也退出。exit(0) 无论在主线程还是普通线程使用,都是退出进程。pthread_exit()在任意地方调用都可以退出一个线程,且谁调用谁原创 2022-03-21 16:44:49 · 1536 阅读 · 0 评论 -
线程控制:线程的创建
线程控制通过代码实现线程的创建/退出/等待/分离进行线程控制的接口代码,都来自库函数,也就是说,操作系统没有提供创建线程的接口,大佬们人为的使用库函数封装了一套线程库。这套封装的线程库函数,提供线程的各种操作。使用库函数创建一个线程(用户态),本质上是在内核中创建一个轻量化的进程来实现程序的调度。(pcb是一个task_struct结构体,存储在内核中,使用的是内核空间,想要访问pcb就得切换到内核态运行。)创建:int pthread_create(pthread_t* thread,co原创 2022-03-21 14:03:01 · 626 阅读 · 0 评论 -
多线程概念:线程的独有和共享
线程概念:在Linux内核中,实质上是没有线程这个概念的,也没有提供创建线程的接口;创建线程的接口,是通过库函数实现的,为了让pcb可以实现只调度完整代码中的某一或部分函数。可以理解为:进程是一个pcb集合,线程就是一个一个的进程执行流,各自同时分工,提高进程的效率。特点是:这个进程中的所有pcb共用一块虚拟地址空间,共用进程的大部分资源(程序运行时,操作系统为程序运行所分配的所有资源),所以这些pcb线程又被称为轻量级进程。而在Linux下,这些执行流又是通过pcb来实现的,所以可以抽象理解为线原创 2022-03-21 11:29:39 · 2402 阅读 · 0 评论 -
进程概念:操作系统与进程
冯诺依曼体系最早的就是这样,输入设备将数据交给CPU处理,然后给输出设备输出。CPU的数据处理速度是特别快的。主频(处理速度)大概2.5GHz。但这样的缺点就是,如果输入慢,CPU的性能就得不到最大的发挥,如果输出的慢了,CPU将大量的数据传给输出设备,就会造成数据堆积。这种数据的处理方式是不科学的。所以就进行了改进。在输入设备与CPU之间加入了存储器。其实质作用就是对数据进行缓冲。输入设备将数据交给存储器,CPU从存储器上读取数据进行处理,然后由存储器交给输出设备进行输出,这个存储器就是内存原创 2022-03-07 16:57:12 · 700 阅读 · 0 评论 -
Linux基础指令
今天是我学习Linux操作系统的第一天,谨以此篇来回顾一下我上课所学习的内容。Linux系统下的目录结构Windows目录:在说Linux目录之前,我们有必要说一下我们常用的windows操作系统的目录。在windows下,我们可以直观的发现像这样的磁盘分区:其实这样的磁盘分区都有自己的根目录结构,这样形成了多个树并列的情况。Linux下目录在Linux操作系统下,我们并不能直观的看到一些文件夹和磁盘分区。但我们学习lLinux,,就应该知道它内部的结构。在Linux下,并没有像windo原创 2021-06-03 19:08:55 · 95 阅读 · 1 评论 -
Linux系统内核及其权限
终端在Linux/unix世界里,终端是一个非常基本、重要的概念。那么终端到底是什么呢?终端——人与机器交互的接口;我愿意把计算机分成以下概念:计算机 = 主机 + 终端; 终端 = 输入设备 + 输出设备;人和机器是两个独立的实体,当人使用机器时,必须借助某种接口才能与机器交流信息。计算机的接口包括显示器、键盘、鼠标、扬声器、麦克风等。CPU、内存、硬盘、光驱、显卡、网卡等其他硬件属于主机。Linux/unix将这种实现人机交互的接口称为终端。系统结构内核系统内核是操作系统最基本的部原创 2021-06-05 10:41:15 · 770 阅读 · 5 评论