首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带着问题源码 —— 进程 ID 是如何分配

前言 在《[apue] 进程控制那些事儿 》一文中,曾提到进程 ID 并不是唯一,在整个系统运行期间一个进程 ID 可能会出现好多次。 > ....Linux 上是如何检索并分配空闲 pid ?带着这个问题,找出系统对应内核源码个究竟。...这东西还可以嵌套、还可以对上层可见,所以做很复杂,可以开一个单独文章去讲它了。这里为了不偏离主题,暂时搁置,直接 alloc_pidmap 完事儿,感兴趣可以参考附录 6。...,就是通过位图这种数据结构,在系统页大小为 4K 情况下,一个页就可以表示 4096 * 8 = 32768 个 ID,这个数据刚好是《[apue] 进程控制那些事儿 》中实测最大进程 ID 值,看起来...内核小知识 第一次内核源码,发现有很多有趣东西,下面一一说明。

11010

从App角度进程和线程

到这里,我们在总结下进程和线程定义: 进程:一个正在运行程序实例,包含一个或多个线程,最少有一个线程。 线程:执行进程一部分程序或者代码指令。 那么他们之间区别和联系是什么?...(1)进程包含至少一个线程,果只有一个线程,这个线程通常叫做主线程。线程是进程一部分代码或者指令 (2)进程有独立内存存储,线程共享进程内存空间,此外线程有自己独立栈存储。...)进程有独立signal信号,线程共享进程signal信号 (7)进程相互之间不依赖,线程之间有依赖。...(8)进程不需要同步,线程一般需要同步 (9)进程是数据组织概念,线程是cpu调度概念 (10) 进程上下文切换慢,线程上下文切换快 最后还有一个问题,子进程与线程有什么关系?...这里需要注意子进程也是一个进程,一般用于多任务操作系统,子进程也称子任务与进程性质是一样,也可以包含一个或多个线程。 总结: 本文主要介绍了操作系统中进程和线程定义,区别和联系。

44320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Nginx服务器进程

    Nginx服务器进程有3类:主进程、工作进程、缓存进程 (1)主进程 Nginx启动时运行主要进程,主要功能是与外界通信和对内部其他进程进行管理 主要工作内容 1)读取配置文件,验证有效性和正确性...2)建立、绑定、关闭 socket 3)按照配置生成、管理、结束工作进程 4)接收指令,如 重启、升级、退出 5)不中断服务,平滑重启、升级,升级失败回滚处理 6)开启日志文件,获取文件描述符 (2)...工作进程 由主进程生成,生成数量由配置文件指定,工作进程生存于主进程整个生命周期 主要工作内容 1)接收请求 2)将请求依次送入各个功能模块进行过滤处理 3)IO调用,获取响应数据 4)与后端服务器通信...,接收后端服务器处理结果 5)数据缓存,访问缓存索引、查询、调用缓存数据 6)发送请求结果 7)接收主进程指令,如 重启、升级、退出 (3)缓存进程 缓存进程有两类 1)缓存索引重建进程 nginx启动后由主进程生成...,在缓存元数据重建完成后就自动退出 该进程启动后,对缓存文件目录结构扫描,在内存中建立索引元数据库 2)缓存索引管理进程 生存于主进程整个生命周期 负责在索引元数据更新完成后,对元数据是否过期进行判断

    4.4K40

    写给大忙人进程和线程

    CPU 上如何运行多个顺序进程错觉做更多解释。...,如何编写 Web 服务器。...关于进程通信,这里有三个问题 上面提到了第一个问题,那就是一个进程如何传递消息给其他进程。 第二个问题是如何确保两个或多个线程之间不会相互干扰。...开始时,进程 0 检查 turn,发现其值为 0 ,于是进入临界区。进程 1 也发现其值为 0 ,所以在一个等待循环中不停测试 turn,其值何时变为 1。...如果希望进程之间协作的话可以交换它们之间票据。例如,客户端进程服务器进程发送了一条消息后阻塞,客户端进程可能会把自己所有的票据都交给服务器,来增加下一次服务器运行机会。

    74931

    从溯源角度进程间互斥

    文章目录 临界区 屏蔽中断 锁变量 自旋锁 TSL 指令 对多种进程间通信方式介绍在这篇总结过了:进程间通信,不过没有提互斥,因为我一直是把互斥和通信分开。...对于一个好解决方案,需要满足以下4个条件: 任何两个进程不能同时处于其临界区; 不应该对CPU速度和数量做任何假设; 临界区外运行进程不得阻塞其他进程 屏蔽中断 在单处理器系统中,最简单就是使每个进程在刚刚进入临界区时候立即屏蔽所有的中断...CPU只有在发生时钟中断时候才会进行进程切换,这样,在屏蔽中断后CPU就不会被切换到其他进程。 这样方案有什么问题吗? 问题大了。把本该属于系统内核权利交给用户是非常危险。...既然不是原子操作,就有很多可以插一脚地方了。不用我多说了。 自旋锁 一个案例,两个进程等待一把自旋锁: while(true){ while(turn !...如果这时候出现这么一种情况:如果0号进程出了临界区,将锁放给1号进程,而一号进程还有一些临界区外事务没有处理完,这就很尴尬了。 只有在有理由认为等待事件是非常短情况下,才使用自旋锁。

    52510

    进程服务器

    一、思路 先与客户端建立好连接, 每次监听到一个客户端之后,都需要产生一个子进程去处理这个连接,然后父进程继续去等待监听,唯一一个要注意点就是要使用信号来监听子进程是否结束,从而对其进行回收,防止僵尸进程产生...&opt, sizeof(opt)); (3)bind函数 bind(lfd, (struct sockaddr*)&ser_addr, sizeof(ser_addr));b这个函数主要目的就是将服务器地址结构绑定到套接字...lfd上,所以开始要设置服务器ser_addr:ser_addr.sin_family = AF_INET, ser_addr.sin_port = htons(8888);ser_addr.sin_addr.s_addr...= htonl(INADDR_ANY);端口8888是可由自己设置,, (3)listen函数 设置监听上限函数,,并不是阻塞监听函数listen(lfd, 128); (4)accept函数...cfd; 2、创建子进程 监听到了客户端后,就要开始创建子进程来对这个监听进行处理;pid = fork() 3、子进程处理通信 因为子进程不需要监听连接,使用可以close(lfd);之后便可以进行通信处理

    4.7K20

    从集装箱历史DevOps发展进程

    什么样技术会带来生产力极大提升?技术含量是否与生产力提升成正比关系? 带着问题,我们先看一个例子:在工业革命时期,瓦特用于“改良”蒸汽机技术,就是极大提升效率技术。...从上面的例子可以看出技术含量高低与带来生产力大小并没有直接关系。 传奇集装箱 我们来看另外一个有趣故事,希望你能从中得到启发。...从此,集装箱时代到来了。只在1967年一年时间里,麦克莱恩就从美国国防部赚了4.5亿美金。低廉海运成本、大大缩短运输时间以及到货时间可预期,让全球制造业分工协作效率得到极大提高。...一个客户:在货物“送货”过程,只有一个客户,简化送货过程。 DevOps流程3D原则 与如何高效利用集装箱类似,在DevOps实施过程中,通过优化流水线中间流转过程,提升总体效率。...这个进程难点在于,以一家运输企业推进整个运输体系针对集装箱优化。 随着技术发展,DevOps周边环节正在逐步完善,DevOps实施3D原则,也让我们走入故事后半段,就像集装箱故事那样。

    88340

    就懂:如何搞笑文献

    文献 标题不是错字,就是搞笑。大家一听到组会讲文献,四不四还会如鲠在喉。其实文献并没有那么难看~ 学会在文献中找包袱 文献是个啥 Paper, 文献,就是一个带着包袱很严肃文学作品。...有啥意义(为啥人家能发cell,你只能发OT) 接下来去瞅瞅Results题目,这个事文章逻辑主线,写文章一般是从大到小,总分逻辑。...你要知道谁大谁是总,谁小谁分这个时候你需要脑补一个画面,在什么样年代,男主A跟女主B怎么认识,女二C是怎么出现,男二D又是怎么跟女二C搅在一起,最后A-B结合了怎么影响C-D结合滤清逻辑之后,自己要画个图...接下来:甩了包袱要接住呀,不要冷场要看看作者是怎样证明,用了哪些实验,在正文中附属材料中好好读读每一个图,细致研究图坐标啥意思,图例中写啥。...最后要做 看完之后一定要问自己两个问题 为什么他能发Cell,我只能发OT? 参照这篇文章,自己课题还有哪里需要完善?

    46030

    从linux0.11一个进程诞生

    该表保存了系统和所有进程tss和ldt描述符信息。tss就是我们平时说进程上下文。每个进程有一个ldt数组,里面保存了代码段和数据段描述符信息。 首先,从一个进程诞生说起。...我们知道,通过fork可以创建一个进程。下面我们来看一下fork过程都做了什么事情。先通过find_empty_process获取一个可用进程id和pcb。pid是进程id。...pcb是管理进程结构体。...tss信息中ldt索引首先从gdt找到进程ldt 结构体数据首地址,然后根据当前段属性,比如代码段, 则从cs中取得选择子,系统从ldt表中取得进程线性空间 首地址、限长...在这里插入图片描述 进程创建本质就是申请一个新pcb,里面保存了该进程相关信息,假设现在轮到该进程执行。系统会根据tss选择子到gdt表中找到tss结构体地址。

    1.5K11

    漫画 | 进程小 P 讲述它网络性能故事!

    今天给大家带来是一个漫画故事! 01 大家好,我是一个进程,我名字小 P。 我和很多其它小伙伴一样,都由老大操作系统创建和管理。 要问我是怎么来,嘘小点声,不能让那帮应用开发们听见。...其实就是内核开发都认为应用开发是傻逼,怕应用开发代码把服务器给搞坏。就设计了我们进程出来,专门运行各种用户态代码。 我们天然和内核里小伙伴们被隔离开来。...02 我们进程通过一个叫 socket 的哥们来和我们用户通信。但是实际上所有的 socket 以及整台机器上网络包都是在内核态来把控着,我们只能拿到 socket 编号。...后来老板不断压榨我们,让我们一个进程处理成百上千条连接。这时候 read 某条连接时候,没有数据就把我们挂起来,我们哪儿受得了哇, 我们还有其它好多连接要处理呢。...不过我所谓叫醒,其实只是推入到就绪队列而已。真正调度还得等进程调度器老哥把我拉起来。 ,我和 epoll、软中断、进程调度器等几兄弟配合是不是天衣无缝!

    23130

    带你看懂串口服务器如何使用一便知!

    在这个万物互联时代,数据与数据之间相互传输交流,显得尤为重要。那么要怎样才能使计算机与传统物联设备相连接呢?这时,串口服务器这一媒介作用就凸显出来了。那么,你知道什么是串口服务器吗?...串口服务器如何使用呢?今天,就由海翎光电小编来为大家详细介绍下串口服务器。 一、什么是串口服务器? 串口设备联网服务器,简称串口服务器。   ...设备连线:首先将串口服务器串口和设备串口连接,串口服务器 RJ45接口和路由器(或者直接连接PC)连接,然后对串口服务器上电。 串口服务器连接方法有哪些?   ...通过串口服务器将数控设备连接到以太网上,其接线方式非常简单,只需要将串口服务器连接到集线器或者交换机上即可,通过设置串口服务器IP地址,就可使串口服务器成为以太网上一个节点,从使连接到该串口服务器数控系统连接到以太网上...串口服务器如何使用?   配置串口参数:    串口服务器可以通过Web网页进行参数修改。通过 Web网页修改参数时需要串口服务器必须和计算机处于同一个子网中。

    3.3K20

    Linux服务器进程查看命令详解

    Linux 服务器正常启动后,提供服务时会调用程序,占用进程。这时候我们如何查看系统中有哪些进程在被调用呢?我们可以通过以下命令来查看。...通过 ps 命令查看进程,根据所显示信息可以了解哪个进程正在运行、哪个进程被挂起了、进程已运行了多久、进程正在使用资源、进程相对优先级,以及进程标志号(PID)。...SMar16  0:06 nginx: worker process 二、top 命令 top 命令可动态显示服务器进程信息。top 命令和 ps 命令基本作用是相同,都显示系统当前进程状况。...另外,大家有兴趣也可以了解一下 pkill 用法,在服务器里用它来“踢人”还是很方便,这个命令在工作中我们用得不多,大家稍微了解一下即可。...在 Linux 下,最强大进程管理命令莫过于 ps 和 top 了,我们应该掌握它们详细语法,在工作中灵活地使用它们。 注:以上内容整理自《构建高可用 Linux 服务器》一书。

    22.1K101

    Linux进程如何查看进程详情?

    5、如何通过cpu和内存使用来过滤进程? 也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你资源。...7、如何根据线程来过滤进程呢? 如果我们想知道特定进程线程,可以使用 -L 参数,后面加上特定PID。 $ ps -L 1213 ? 8、如何树形显示进程?...如果想要查看现在有谁登入了你服务器。可以使用ps命令加上相关参数: $ ps -eo pid,user,args 参数 -e 显示所有进程信息,-o 参数控制输出。...如何格式化输出root用户(真实或有效UID)创建进程?...这里有上面的命令输出结果: ? 11. 如何使用PS实时监控进程状态? ps 命令会显示你系统当前进程状态,但是这个结果是静态

    12.3K20

    Oracle进程内存结构-如何察看Oracle进程消耗内存

    Oracle进程内存结构-如何察看Oracle进程消耗内存 Last Updated: Sunday, 2004-11-28 11:12 Eygle 经常有人问到如何在Unix下确定进程消耗内存资源...有人说Top输出不精确,这种说法是不确切。实际上是Top输出显示Oracle进程内存使用,包含了SGA部分。这也是SGA意义所在。...SGA可以被共享,可以被所有进程所访问,在进程寻址空间里就包含了SGA大小。...至于如何更为精确的确定进程内存消耗,本文简要介绍如下(在QuickIO下,你可能无法看到本文描述情况): 1.系统平台及数据库版本 $ uname -a SunOS billing 5.8 Generic...: 337360K - 266240K = 71,120k 这就是一个进程所消耗内存. 4.用户进程内存使用举例 $ ps -ef|grep LOCAL oracle 10080 9872

    3.3K30

    进程web动态服务器

    次会用到我们上次写进程服务器 我们既然学习了 面向对象,就用面向对象来改进一个这个程序: import socket import re import multiprocessing class...最终还是要在服务器中国调用函数,我们想要把他分开。 很简单,我们把请求方法从服务器传过去,在py文件中判断就好了。自己尝试一下。...我们刚刚写login.py相当于一个很小web框架,我们很low,就就用别人写,比如Django,在框架我服务器之前如何动态传输?也有一套规则,我们将这套规则叫做WSGI协议。...1.0')]),这样我们在浏览器中就可以看到我们设置服务器。...但是WSGI就是负责和服务器交互,我们需要在服务器中修改。

    3.2K20

    进程TCP并发服务器

    进程TCP并发服务器 最初服务器都是迭代服务器服务器处理完一个客户请求,再接受下一个客户请求。但是我们期望应该是一台服务器同时为多个客户服务。...实现并发服务器最简单办法就是为每个客户均fork一个子进程。...[accept返回后客户-服务器状态] 并发服务器下一步是调用fork,下图是从fork返回后状态。此时描述字listenfd和connfd是父进程-子进程共享。...[fork返回后客户-服务器状态] 下一步是父进程关闭已连接套接口,子进程关闭监听套接口。...[父子进程关闭相应套接口后客户-服务器状态] 最后结果是子进程处理与客户连接,父进程可对监听套接口调用accept来处理下一个连接。

    5.9K90
    领券