Day3 program, process, thread傻傻分不清楚

昨天讲完了linux的核心架构,今天就开始让我们认识重要的部分吧。
以下是三个名词,程序(program)、行程(process)、执行序(thread),在作业系统中最常见的解释。

程序(program)

通常是指完成特定任务的有序指令集合,或是一个可执行的文件。也就是由工程师所编写的程序码(code),放在硬碟中,尚未读入记忆体的的code。

行程(process)

是一段执行中的程序,内容已经被移入记忆体,是一个"活生生"的个体,在一个行程里面会有可执行的指令,也包含了行程执行时所需要的活动资讯。
在作业系统中,会用行程控制块(process control block, PCB),记录行程所需要的资讯,常见的有以下几种

  • 行程目前的状态(state):像是运行中、就绪、僵屍状态(zombie state)等等
  • 程序计数器(Program Counter, PC):纪录目前行程执行到哪条指令。
  • CPU暂存器(CPU registers):在上下文切换时保存CPU当下的寄存器状态,以便切换回来的时候能够继续执行。
  • CPU排程资讯(CPU scheduling info):包含行程的优先权等级、排程的序列等等。
  • 记忆体管理(memory management info):行程使用的记忆体资讯,像是使用的分页表(page table)
  • 文件资讯:行程打开的文件等等。

执行绪(thread)

作业系统分配记忆体、CPU时间等等资源的基本单元。

上述都是最常见的解释,但是,人生最重要的就是这个BUT,Linux 里面并没有区分行程与执行绪,而是一鱼两吃,用 task_struct可以代表process 或 thread。
从实作的角度看来
建立user process的方法是有三个系统呼叫: fork, vfork, clone
建立kernel thread的方法有两种系统呼叫: kernel_thread, kthread_create

而以上这些API还有library function最後都会call到 `_do_fork`
而`do_fork`所做的事就是填 `task_struct`,只要填好task_struct就是把该task给创建出来了 !!!

以上的话在现今版本的linux是错的,哪里有问题有待明日分晓!!

day3,遇到中秋连假,又帮母亲的电脑进行系统转移搞得七晚八晚,今天只能滥竽充数了。


<<:  月费如何定价?免费试用会提高订阅率吗?

>>:  生成模式 - abstract factory

[Day 4] Leetcode 764. Largest Plus Sign (C++)

前言 今天的题目在这里:764. Largest Plus Sign,是一题medium的题目。我直...

LINE BOT聊天机器人-第一步-建立

兴趣是学习最好的老师。 大概是去年年底或今年年初开始玩聊天机器人吧,原本是自己做来好玩用的,不过我会...

【Day16】逻辑运算子及函式预设值

逻辑运算子 &&(and) 使用方式: expr1 && expr2...

【设计+切版30天实作】|Day24 - Steps区块 - 如何做出渐层背景?

前面完成了「Pros」区块,今天来完成「Steps」的区块。 数据收集 标题的样式 Font-we...

Day27 vue.js简易照片上传功能(base64)

延续昨日 今天我们来处理一下新增帐户的照片 这是我们目前的修改帐户页面 首先先把layout做出来 ...