操作系统
文章平均质量分 80
编程小镇
贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。
展开
-
线程同步(互斥量、死锁、读写锁、生产者与消费者模型实现)
线程同步(互斥量、死锁、读写锁、生产者与消费者模型实现)线程同步互斥量 mutexmutex 相关系统调用死锁读写锁条件变量实现生产者与消费者模型信号量实现生产者与消费者模型线程同步 在多线程进行 线程的主要优势在于,能够通过全局变量来共享信息。不过,这种便捷的共享是有代价的:必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正在由其他线程修改的变量。 临界区是指访问某一共享资源的代码片段,并且这段代码的执行应为原子操作,也就是同时访问同一共享资源的其他线程不应终端该片段的执行。原创 2021-02-04 10:38:36 · 356 阅读 · 1 评论 -
线程基本概念
线程基本概念 与进程(process)类似,线程(thread)是允许应用程序 并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且 共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的 UNIX 进程只是多线程程序的一个特例,该进程只包含一个线程) 进程是 CPU 分配资源的最小单位,线程是操作系统调度执行的最小单位。线程是轻量级的进程(LWP:Light Weight Process),在 Linux 环境下线原创 2021-02-02 08:44:52 · 130 阅读 · 0 评论 -
线程相关系统调用(pthread使用)
线程相关系统调用(pthread使用)创建线程(pthread_create())终止线程(pthread_exit())连接已终止线程(pthread_join())线程分离(pthread_detach())线程取消(pthread_cancel())线程属性创建线程(pthread_create())函数原型#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,原创 2021-02-02 14:17:38 · 1106 阅读 · 0 评论 -
守护进程
守护进程终端进程组会话守护进程创建守护进程终端 在 UNIX 系统中,用户通过终端登录系统后得到一个 shell 进程,这个终端成为 shell 进程的控制终端(Controlling Terminal),进程中,控制终端是保存在 PCB 中的信息,而 fork() 会复制 PCB 中的信息,因此由 shell 进程启动的其它进程的控制终端也是这个终端。 默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准原创 2021-01-29 21:27:23 · 125 阅读 · 0 评论 -
进程间通信(五)共享内存
进程间通信(五)共享内存共享内存的使用步骤相关系统调用小结 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会成为一个进程用户空间的一部分,因此这种 IPC 机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。 与管道等要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用户空间的缓冲区的做法相比,这种 IPC 技术的速度更快。共享内存的使用步骤调用 sh原创 2021-01-29 17:07:50 · 744 阅读 · 0 评论 -
进程间通信(四)信号
进程间通信(四)信号信号的基本概念产生信号的事件信号的目的与特点各种信号信号的状态及默认处理动作信号相关函数kill(), raise(), abort()alarm() 定时器setitimer() 定时器信号捕捉函数(signal(), sigaction())SIGCHLD 信号信号集未决信号集与阻塞信号集自定义信号集相关函数系统信号集操作函数信号的基本概念 信号是 Linux 进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟原创 2021-01-26 18:59:57 · 215 阅读 · 0 评论 -
进程间通信(三)内存映射
进程间通信(三)内存映射mmap()系统调用 内存映射(Memory-mapped I/O) 是将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件。下面介绍内存映射相关的系统调用。 mmap()系统调用函数原型#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);int munmap(void原创 2021-01-25 14:07:54 · 311 阅读 · 0 评论 -
进程间通信(二)有名管道
进程间通信(二)有名管道有名管道 / 命名管道创建命名管道的两种方式命令创建(mkfifo)系统调用创建(mkfifo())使用有名管道在两个进程之间进行通信有名管道 / 命名管道 匿名管道,由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道(FIFO),也叫命名管道、 FIFO文件。 有名管道(FIFO)不同于匿名管道之处在于它提供了一个路径名与之关联,以 FIFO的文件形式存在于文件系统中,并且其打开方式与打开一个普通文件是一样的,这样即使与 FIFO 创建进程不原创 2021-01-16 19:44:21 · 225 阅读 · 0 评论 -
进程间通信(一)匿名管道通信
进程间通信(一)管道通信管道介绍及特点匿名管道使用(pipe系统调用)管道缓冲区大小(ulimit -a)匿名管道通信实例 —— 实现 |小结巨人的肩膀 管道介绍及特点 管道也叫无名(匿名)管道,它是是 UNIX 系统 IPC(进程间通信)的最古老形式,所有的 UNIX 系统都支持这种通信机制。 举个例子,统计一个目录中文件的数目命令:ls | wc –l,为了执行该命令, shell 创建了两个进程来分别执行 ls 和 wc。中间的 | 为管道符,ls 进程将得到的结果(默认输出至终端)交原创 2021-01-15 17:05:48 · 236 阅读 · 0 评论 -
进程间通信
操作系统面试送分题(五)进程间通信灵魂拷问:进程间通信方式有哪几种?每一种方式的实现原理?原创 2021-01-15 16:57:30 · 141 阅读 · 0 评论 -
Linux 进程回收的系统调用(wait、waitpid)
Linux 进程回收的系统调用(wait、waitpid)wait 系统调用waitpid 系统调用 在每个进程退出的时候,内核释放该进程所有的资源、包括打开的文件、占用的内存等。但是仍然为其保留一定的信息,这些信息主要主要指进程控制块PCB的信息(包括进程号、退出状态、运行时间等)。 父进程可以通过调用 wait 或 waitpid 得到它的退出状态同时彻底清除掉这个进程。注意:一次wait或waitpid调用只能清理一个子进程,清理多个子进程应使用循环。 wait 系统调用函数接口原创 2021-01-06 20:27:23 · 334 阅读 · 0 评论 -
操作系统面试送分题(四)孤儿进程、僵尸进程
操作系统面试送分题(四)孤儿进程、僵尸进程 孤儿进程 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程(Orphan Process)。 每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init,而 init进程会循环地 wait() 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候, init 进程就会代表党和政府出面处理它的一切善后工作。 因此孤儿进程并不会有什么危害。init 进程是pid为1的Linux初始化进程。示原创 2021-01-06 18:10:16 · 162 阅读 · 0 评论 -
进程退出的两个接口( exit()、_exit() )
进程终止 进程在被创建后,开始运行完成其工作。通常在下列几个条件使得进程退出:正常退出出错退出严重错误:程序中有bug被其他进程杀死进程退出的两个接口(exit 、 _exit)#include <stdlib.h>void exit(int status);#include <unistd.h>void _exit(int status);参数:status :进程退出时的一个状态信息。父进程在回收子进程资源时获取。示例1:exit#inc原创 2021-01-05 13:10:04 · 361 阅读 · 0 评论 -
Linux进程创建之浅析fork()
在Linux 内核中,无时无刻不维护着进程,从进程的创建到进程销毁,每一个环境都有着复杂的细节。本篇介绍Linux 内核如何创建进程,深入理解 fork 函数以及子进程的创建,对理解多进程开发也至关重要。Linux进程创建之fork浅析fork() 函数fork() 示例父子进程的虚拟地址空间fork() 函数 首先来看下fork() 函数,其作用是创建子进程。头文件与函数原型如下#include <unistd.h>// 参数 : void // 返回值: pid_t 创建原创 2020-12-31 13:28:59 · 221 阅读 · 0 评论 -
Linux进程常用命令及使用
Linux进程相关命令topps原创 2020-12-30 19:40:49 · 160 阅读 · 0 评论 -
操作系统面试送分题(三):进程状态
操作系统基础知识:进程状态&emssp;原创 2020-12-30 18:50:23 · 592 阅读 · 1 评论 -
操作系统面试送分题(二)什么是并行?什么是并发?
灵魂拷问:什么是并行?什么是并发? 并行:指同一时刻,多条指令在多个处理器上同时执行。并发:在同一时刻,仅有一条指令执行,但多个进程快速切换,使得宏观来看有多个进程在执行,但实际并不是同时执行的,而是快速交替的执行。对于服务端来说,并发编程至关重要。在服务请求巨大时,如双十一,同一时刻会有巨大流量访问服务器,如何使得服务器不崩溃,如何使得服务器稳定运行,并发就尤为关键。 并发是在有限资源上,尽可能使得效率提高,在程序并发执行时,需要注意对资源的访问控制。而不同进程并行执.原创 2020-12-29 19:33:27 · 344 阅读 · 0 评论 -
操作系统面试送分题(一)什么是程序?什么是进程?他们之间的区别是什么?
操作系统基础知识:什么是程序?什么是进程?他们之间的区别是什么?点击链接直达 操作系统面试汇总本篇文章详细讲解以下问题:什么是程序?什么是进程?他们之间的区别是什么?灵魂拷问:程序与进程的区别? 程序是包含一系列信息的文件,描述如何在运行时创建一个进程,如我们写的源代码文件,编译好的可执行文件 .out 文件等。所以在操作系统角度,程序是创建进程的描述。程序文件可以包含以下描述信息:二进制格式标识 :每个程序都有用于描述可执行文件格式的信息。Linux 内核通过该信息来处理和解释文件中的原创 2020-12-29 18:27:39 · 401 阅读 · 0 评论