Linux——操作系统
文章平均质量分 67
For_zwb
虚心万事能成;自满十事九空。
展开
-
Linux 多进程/多线程同时write()一个文件及O_APPEND参数实验验证
基于该博客的结论进行实验验证首先需要各位前去看链接中的博客,了解里面的结论和知识点再来看我的实验验证。write调用能保证的是,不管它实际写入了多少数据,比如写入了n字节数据,在写入这n字节数据的时候,在所有共享文件描述符的线程或者进程之间,每一个write调用是原子的,不可打断的。举一个例子,比如线程1写入了3个字符’a’,线程2写入了3个字符’b’,结果一定是‘aaabbb’或者是‘bb...原创 2019-12-29 17:51:30 · 3161 阅读 · 5 评论 -
从Linux内核谈僵尸进程
僵尸进程摘自百度百科:僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进...原创 2019-12-24 21:19:43 · 249 阅读 · 0 评论 -
Linux线程实现机制
一.基础知识:线程和进程按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。无论按照怎样的分法,一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等等),而将线程分配到某个cpu上执行。一个进程当然可以拥有多个线程,此时,如果进程运行在S...转载 2019-12-18 10:48:32 · 681 阅读 · 0 评论 -
浅谈Linux内核与线程的关系及线程调度
首先,文章的开篇我们先看几个概念用户级线程用户级线程顾名思义就是用户态下的线程,用户线程的建立,同步,销毁,调度完全在用户空间完成,不需要内核的帮助。因此这种线程的操作是极其快速的且低消耗的。内核线程内核级线程,是指由内核管理的线程多线程模型多对一这种模型下创建的许多用户线程就会如下图所示。优点就是创建的代价非常小缺点也很明显,当一个线程阻塞住,该内核上的其它用户线程也会阻塞。...原创 2019-12-17 15:31:37 · 1324 阅读 · 0 评论 -
进程池详解(linux)
进程池进程池是我们创建一组进程,进程数目可以自己的规定,目的是为了让我们可以并发的去处理任务,此文处理的是网络请求的进程池。采用的是半同步/半反应堆模式的进程池。主进程epoll监听listenfd,如有客户连接根据特定算法将客户连接套接字利用管道发送给进程池中的某个进程,让其进行监听。该算法主要是为了平衡进程池中每个进程epoll监听的套接字数量。防止某个进程监听过多性能降低。然后每个进...原创 2019-10-14 19:21:08 · 913 阅读 · 16 评论 -
线程同步机制——POSIX信号量、互斥量、条件变量
信号量#include<semaphore.h>int sem_init(sem_t* sem, int pshared, unsigned int value);int sem_destory(sem_t* sem);int sem_wait(sem_t* sem);int sem_trywait(sem_t* sem);int sem_post(sem_t* sem);...原创 2019-09-26 19:13:55 · 352 阅读 · 0 评论 -
linux创建进程do_fork()详解
do_fork()下面是do_fork()精简后的源码long do_fork(unsigned long clone_flags, unsigned long stack_start, unsigned long stack_size, int __user *parent_tidptr, int __user *child_tidpt...原创 2019-10-13 15:20:57 · 795 阅读 · 0 评论 -
clone()函数及其与Linux线程实现的关系
#include<sched.h>int clone(int (*func)(void*), void *child_stack, int flags, void* fimc_arg ...);/* pid_t *ptid, struct user_desc* tls, pid_t* ctid*/还有三个参数在Linux2.6版本中提出,主要是为了线程的实现。return pr...原创 2019-10-13 15:15:53 · 1132 阅读 · 1 评论 -
进程间通信
进程是Linux操作系统环境的基础,它控制着系统上几乎所有的活动。进程基础概念复制进程映像的fork系统调用和替换进程映像的exec系列系统调用僵尸进程以及如何避免僵尸进程进程间通信 最简单的方式: 管道3种system V进程间通信方式: 信号量、消息队列和共享内存。在进程间传递文件描述符的通用方法:通过unix本地域socket传递特殊的辅助数据。...原创 2019-10-11 12:23:22 · 120 阅读 · 0 评论 -
线程池(linux)
线程池概念线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。我们将任务添加到任务队列中,线程池得知有任务到来后,会唤醒线程,如若所有线程都在执行任务,则线程会处理完当前任务后,在处理任务队列中的线程。作用线程池可以节省我们的系统资源和时间。线程过多会带来调...原创 2019-08-29 10:00:40 · 235 阅读 · 0 评论 -
虚拟内存
虚拟内存的概念虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有地址空间。虚拟内存提供了三个重要的功能:它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域。并根据需要在磁盘和主存之间来回传数据,通过这种方式,它高效的适用了主存它为每个进程提供了一致的地址空间(在linux中的写时复制技术根据这个特性有效的...原创 2019-08-03 13:37:42 · 244 阅读 · 0 评论 -
linux下 dup dup2函数的用法以及缓冲区问题
dup 与dup2函数Linux c 函数#include&lt;unistd.h&gt;int dup(int fd);int dup2(int fd1,int fd2);两个均为复制一个现存的文件的描述 两个函数的返回:若成功为新的文件描述,若出错为-1; 由dup返回的新文件描述符一定是当前可用文件描述中的最小数值。用dup2则可以用fd2参数指定新的描述符数值。如果...原创 2018-09-03 18:00:25 · 632 阅读 · 0 评论 -
linux进程fork——写时复制
fork到底复制了父进程的哪些资源?我们来看一个例子#include&amp;amp;lt;stdio.h&amp;amp;gt;#include&amp;amp;lt;stdlib.h&amp;amp;gt;#include&amp;amp;lt;unistd.h&amp;amp;gt;#include&amp;amp;lt;sys/wait.h&am原创 2018-08-12 15:45:41 · 2800 阅读 · 10 评论 -
Linux进程总结
一 进程- Linux是一个多用户多任务的操作系统。 1概念:进程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才能进行。...原创 2018-08-12 12:06:03 · 814 阅读 · 0 评论