首页
学习
活动
专区
圈层
工具
发布

写一个操作系统_12 linux 原始的几个进程

原始进程 Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) idle进程 由系统自动创建, 运行在内核态 idle进程其...pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。...由于init是第一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。 确定运行级别 许多程序需要开机启动。...它们在Windows叫做”服务”(service),在Linux就叫做”守护进程”(daemon)。 init进程的一大任务,就是去运行这些开机启动的程序。...Linux预置七种运行级别(0-6)。一般来说,0是关机,1是单用户模式(也就是维护模式),6是重启。

1.2K10

Vue的学习(十)什么是webpack。安装webpack流程,如何最原始的使用webpack

什么是webpack 他就是一个工具,用来进行模块打包。...关键的就是 模块 打包 我们开发项目的使用,有很多的文件,比如js,css ,图片等其他的文件,直接将这些文件放到服务器上面,浏览器是不能解析的。...所以,我们需要一些工具,对这些文件进行打包与转化,之后将转化之后的东西放到服务器上面,浏览器就可以解析了。 ? ? 总之,webpack就是一个工具,这个根据依赖node环境 ?...我们安装webpack是3.6.0 版本的 ,之后安装脚手架vue cli2 ,这个是版本配套的,因为这个版本我们就可以看到源码里面具体的东西。 使用webpack ?...以上是两个js里面的代码,一个js里面引入了另一个js 在控制台进行用webpack进行合并 ? 我们就可以看到生成了一个js ? 在HTML 里面引入合并之后的js ?

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

    如何渲染最原始的yuv视频数据?

    因为最终的片段颜色值是RGBA格式的,而我们的视频是YUV格式的,所以我们需要做一个转化:即将YUV转化为RGBA。   ...等几种 width:指定纹理图像的宽度,必须是2的n次方 height:指定纹理图像的高度,必须是2的n次方 border:指定边框的宽度,必须为0 format:像素数据的颜色格式, 不需要和internalformat...ByteBuffer对象,对返回的ByteBuffer对象所做的更改会反映在原始字节数组上,因为它们共享相同的存储区域 bufferY=ByteBuffer.wrap(y...但是,texture函数计算后得到的是归一化的值,取值范围是[0,1],由于位深是8bit,取值范围是[0,255],减去128相当于减去总范围的一半,所以我们也需要减去总范围的一半,即0.5。  ...ByteBuffer对象,对返回的ByteBuffer对象所做的更改会反映在原始字节数组上,因为它们共享相同的存储区域 bufferY=ByteBuffer.wrap(y

    94010

    Linux进程是如何创建出来的?

    大家好,我是飞哥! 在 Linux 中,进程是我们非常熟悉的东东了,哪怕是只写过一天代码的人也都用过它。但是你确定它不是你最熟悉的陌生人?...我们展开今天的拆解! 一、Nginx 之 fork 创建 worker 在 Linux 进程的创建中,最核心的就是 fork 系统调用。...在 Linux 中,是用一个 task_struct 来实现 Linux 进程的(其实 Linux 线程也同样是用 task_struct 来表示的,这个我们以后文章单独再说)。...地址空间是进程线程最核心的东西,每个进程都有独立的地址空间 3.5 拷贝进程的命名空间 nsproxy 在创建进程或线程的时候,还可以让内核帮我们创建独立的命名空间。...回顾我们开篇提到的一个问题:操作系统是如何记录使用过的进程号的?在 Linux 内部,为了节约内存,进程号是通过 bitmap 来管理的。

    2.8K21

    【Linux】进程控制:理解什么是进程创建,进程终止,进程等待 | 进程替换

    答案是父进程。子进程在退出时,会成为僵尸进程,需要父进程的回收。 那么父进程期望获得子进程退出时得哪些信息呢?...子进程是否是异常退出 没有异常;如果有,可以通过查看错误码来查看错误信息 可以通过查看退出码,来知晓进程的退出情况  可以用以下命令查看最后一次进程退出的退出码 echo $?  ...单进程的进程替换 在理解什么是进程替换之前,我们先来看看进程替换怎么使用,下面是操作系统提供的进程替换的一些函数 这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。...多进程的进程替换  前面的例子是单进程的执行系统命令的进程替换,接下来我们实现一个多进程的执行自己命令的进程替换。...因为在linux中,环境变量的内容是在一个区域放着的,而环境变量表 env 中存的是环境变量的地址,这些地址指向所对应的环境变量;         而我们putenv一个环境变量时,其实是在环境变量表中找一个未使用的下标

    1.2K10

    Linux进程——Linux下常见的进程状态

    本篇主要内容: 操作系统中的进程状态 Linux下的进程状态 在开始之前,我们先来简单了解以下进程状态 进程的本质就是PCB中的一个变量!!! 所谓状态变化,本质就是修改整形变量!!!...分区是磁盘中真实存在的,它的大小往往是很小的,这个部分专门 用于内存严重不足时和内存进行交互,并且当内存情况缓解后,曾经被置换出去的代码和数据又会重新加载进来 当进程被系统调度时,曾经被置换出去的进程代码和数据...Linux下的进程状态 下面是一段库中找的状态的定义: static const char * const task_state_array[] = { "R (running)", /* 0 */ "...此时,恰好系统内的内存资源已经严重不足了,系统压力太大,Linux在是在没办法时候,会通过杀掉进程,节省资源的,来不及进程反应直接被系统 “干掉” 。...总结 在了解Linux中进程的分类时,我们通常是先了解操作系统的进程,因为二者有一定的联系,了解操作系统能更好理解进程在操作系统中的运行关系。进程状态在进程中也极为重要,希望大家能理解透彻!

    3K10

    Linux进程——Linux进程的概念(PCB的理解)

    前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。...Linux进程学习基础 本篇主要内容: 进程的概念 通过系统调用获取进程标示符 1....而操作系统管理进程也是如此,管理的进程对应的数据 而在操作系统对进程上,依然采用的是“先描述,再组织”的方法 操作系统将可执行程序的各种数据加载,拷贝出来,再用结构体把数据存进去,由于可能同时会存在多个进程...课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct 1.2 CPU对于进程列表的处理 在CPU对进程列表进行处理时,PCB中的数据有时不会被...通过系统调用获取进程标示符 2.1 查看进程信息 每一个进程都有自己对应的标识符当我们想查看进程的信息: 指令:ps ajx 这样做的话我们查看的是所有进程,这里我们就要用到之前的学过的指令了

    1.2K10

    用最简单的例子和最通俗的语言解释单进程和多进程

    采用网上的一个利用复制文件来检测多进程和单进程差异的例子。但是例子中许多关键的解释并未给出,反而给入门新手造成了很多不必要的困扰和门槛。...以下的解释重点有两个,1是怎么运行多进程(我测试了多台电脑,具体为什么运行不了,我也不知道,只能按照我自己的方法解释如何可以在我测试的几台电脑上运行)。2是关键性的代码解读。...第一个问题的解答:首先,创建两个工程文件,一个是单进程,一个是多进程。其中多进程无法使用选中部分代码然后ctrl+enter的方式运行,必须运行全部代码,在工程文件上方的运行按钮运行。 ?...对于第二部分的解释: 解释: 其中代码中的copyFile函数中有一句: time.sleep(random.random()) 这是造成时间差异的关键,是这句代码造成的文件复制速度慢(不论是单进程还是多进程...2,文件复制属于io密集型处理,不是多进程擅长的,如果把 time.sleep去掉,单进程的速度会比多进程快。 以上大致就是为什么加 time.sleep来测试多进程的原因。

    1.2K30

    Spring 容器原始 Bean 是如何创建的?

    方法,这个方法专门用来创建一个原始 Bean 实例。...松哥举一个例子,如果我们设置某一个 Bean 的 Scope 是 prototype 的话,那么当第二次获取该 Bean 的实例的时候,就会走 if 这条线。...如果是 className 是一个 SpEL,那么合法的解析结果分为两种: 首先就是解析之后拿到了一个 Class,那这个就是我们想要的结果,直接返回即可。...这个弄懂之后,if 中其他几种情况就好理解了,mbd.getResolvedAutowireMode() 是查看当前对象的注入方式,这个一般是在 XML 中配置的,不过日常开发中我们一般不会配置这个属性...小结 好了,这就是 Spring 容器中 Bean 的创建过程,我这里单纯和小伙伴们分享了原始 Bean 的创建这一个步骤,这块内容其实非常庞杂,以后有空我会再和小伙伴们分享。

    76730

    Linux进程的状态

    进程是操作系统中正在运行的程序实例,它具有多种状态,这些状态反映了进程在生命周期中的不同阶段以及当前的执行情况。...系统性能下降:内核需持续维护僵尸进程的 PCB,增加调度开销。 总结 僵死状态(Zombies)是一个比较特殊的状态。...定义 孤儿进程是指其父进程已经终止,但子进程仍然在运行的进程。由于父进程已经不存在,子进程失去了“监护”,因此被称为孤儿进程。...被systemd进程接管(在现代Linux系统中): 在现代Linux系统中,systemd进程取代了传统的init进程,成为系统的初始化进程。...总结 进程状态是操作系统管理资源和调度任务的核心机制,通过状态转换实现多任务并发执行和资源高效利用。

    46410

    Linux的进程管理

    01 — 系统任务管理 跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z & 最经常被用到:这个用在一个命令的最后,可以把这个命令放到后台执行 ctrl + z:可以将一个正在前台执行的命令放到后台...02 — ps ps 命令用于显示当前系统中由该用户运行的进程列表 选项 说明 -ef 查看所有进程及其 PID(进程号)、系统时间、命令的详细目录、执行者等。...00:01:57 /usr/sbin/mysqld 04 — kill 而 kill 命令用于输出特定的信号给指定进程号(PID)的进程并根据该信号完成指定的行为,其中可能的信号有进程挂起、进程等待、...18:01 CST 2022 oracle@yaoyuan ~$ ll file_a -rw-r--r--. 1 oracle oinstall 0 Jul 31 15:18 file_a 是输入...07 — crontab 我们希望 Linux 系统能够周期性地、有规律地执行某些具体的任务,那么Linux 系统中默认启用的 crond 服务简直再适合不过了 创建、编辑计划任务的命令为“crontab

    2.1K20

    Linux进程——进程的创建(fork的原理)

    查看进程的第二种方法 在Linux系统中,不只有ps能够查看进程,还存在着一个动态目录proc,该目录存放了所有存在的进程,目录的名称。它会随着进程的改变而随时更新它的内容!...创建子进程 2.1 系统调用函数fork 在Linux中,进程的创建方式有两种: 命令行中直接启动进程 通过代码创建 而在用代码创建进程时,实则是进行了系统调用,这里我们就得在学习一个系统调用函数...我们想让子进程协作父进程完成一些工作,这些工作是单进程解决不了的,因此子进程的创建是为了协助父进程,因此父子进程做的是不一样的事情 我们怎么保证父子进程做的是不一样的事情呢?...进程的独立性,首先是表现在有各自的PCB进行之间不会互相影响,代码本身是只读的,不会影响,数据父子是会修改的!代码共享,数据各个进程都会写时拷贝私有一份!...变量id是父进程定义的变量,保存数据,返回的时候发生写时拷贝,不同 的进程执行的代码中的变量id获取的值不同,所以id在父进程和子进程中值不同 3.

    2.1K11

    Linux中查看进程、杀死进程、进入进程的命令

    最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。    ...(1)强行中止(经常使用杀掉)一个进程标识号为324的进程: #kill -9 324 (2)解除Linux系统的死锁 在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。...首先用top命令查处该程序的 PID,然后使用kill命令停止这个程序: #kill -SIGKILL XXX 其中,XXX是包含有Mozolla浏览器的程序的进程标识号。...例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令: #kill -9 XXX 其中,XXX是无用的进程标识号。...(4)killall命令 Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如: # killall -HUP inetd *杀死进程最安全的方法是单纯使用kill

    16.6K30

    最原始的扫雷,最适合休闲时乐一乐。

    上次做个三子棋往死里欺负电脑,没什么意思今天就来做个原始扫雷体验一下被地雷炸上天的快感,说实话没做这个小游戏之前我都没玩过扫雷,后来去找度娘玩了一把才知道这玩意是怎么回事,就是用鼠标去点击给定区域上的某一个位置...其中text.c用来测试扫雷游戏,所以将主函数编写在这里,在这里面调用实现游戏的函数,并完成游戏。game.c专门用来写实现扫雷游戏的函数,game.h声明函数和预定义常量的地方。...实现选择这个功能我们可以用switch语句然后在调用相应的函数即可,仅仅是这样还是不够,因为仅仅这样的话游戏玩一把就结束了,这就跟王者只给你玩一把一样,你肯定得不到满足,而被玩的一方也相应的得不到满足。...这个1到底是雷还是雷的数量呢?这就无从知晓了。所以为了解决这个问题我们创建2个棋盘一个用来埋雷,一个用来记录排查出雷的信息,为了使扫雷游戏更贴近于真实的效果,所以就用※放在空白区域。...【可能性】,也没有面对所有【风浪】的时候的【淡定】。

    53540

    Linux进程调度器的设计--Linux进程的管理与调度(十七)

    调度器的一般原理是, 按所需分配的计算能力, 向系统中每个进程提供最大的公正性, 或者从另外一个角度上说, 他试图确保没有进程被亏待. 1.2 进程的分类 linux把进程区分为实时进程和非实时进程,..., linux总是希望寻找一个最接近于完美的调度策略来公平快速的调度进程. 1.4 linux调度器的演变 一开始的调度器是复杂度为O(n)的始调度算法(实际上每次会遍历所有任务,所以复杂度为O(n))..., 这个算法的缺点是当内核中有很多任务时,调度器本身就会耗费不少时间,所以,从linux2.5开始引入赫赫有名的O(1)调度器 然而,linux是集全球很多程序员的聪明才智而发展起来的超级内核,没有最好...这是因为调度实体本质是一个可以被调度的对象, 要么是一个进程(linux中线程本质上也是进程), 要么是一个进程组, 只有dl_sched_class, rt_sched_class调度的实时进程(组)...deadline实时调度的运行队列(struct dl_rq),也就是说每个CPU都有他们自己的实时进程运行队列及普通进程运行队列 为了方便,我们在图中只描述普通进程的组织结构(最复杂的也是普通进程的组织结构

    4.5K41

    技术是最简单的

    技术是最简单的,最简单的也是技术。有很多事情只有我们经历了明白,有些事情我们可以从别人身上学到,有些则永远学不到。 动画片里的人们以一种预想的方式生活着,这个世界被设定为这样那样。...最简单的是赚钱 在《魁拔妖侠传》开始的时候,对于主人公母亲的一个教诲是: 最简单的是赚钱 无论主人公想去做什么,都会补上一句赚钱是最简单的,不要去想别的。...技术是最简单的 过去一直在想的是提高技术,而提高技术本身而成为了一件有意思的事。 没有太多的工作经验,过去一直试想的是: 当我们技术足够好的话,我们可以很容易地从一个项目切换到另外一个项目。...软件开发者最擅长的就是学习。 上面我们假设了一个前提是——最后两个人有差不多一样的技术领域知识。并不是因为这个工作多年的人不再学习了,而是在这个领域里已经没有足够的领域可以学习了。...人际关系 人际关系是一种复杂的东西,相比于上面的领域知识来说。我们需要去处理和不同人之间的关系,无论是在项目上,还是在哪?但是这真的一点都不简单。 技术才是最简单的。

    1.5K50

    Linux下的进程类别(内核线程、轻量级进程和用户进程)--Linux进程的管理与调度(四)

    本文中出现的,内核线程,轻量级进程,用户进程,用户线程等概念,如果不太熟悉, 可以参见 内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程) Linux进程类别 虽然我们在区分Linux...进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_struct,当然我也想说linux其实也没有线程的概念, 只是将那些与其他进程共享资源的进程称之为线程。...用户进程运行在用户空间上, 而一些通过共享资源实现的一组进程我们称之为线程组, Linux下内核其实本质上没有线程的概念, Linux下线程其实上是与其他进程共享某些资源的进程而已。...处理器竞争:单纯的用户线程是建立在用户空间,其对内核是透明的,因此其所属进程单独参与处理器的竞争,而进程的所有线程参与竞争该进程的资源。 使用资源:与所属进程共享进程地址空间和系统资源。..., Linux下内核其实本质上没有线程的概念, Linux下线程其实上是与其他进程共享某些资源的进程而已。

    7.8K31

    Linux进程ID号--Linux进程的管理与调度(三)【转】

    Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。...是 Linux 中在其命名空间中唯一标识进程而分配给它的一个号码,称做进程ID号,简称PID。...(轻量级进程组)的ID标识 在一个进程中,如果以CLONE_THREAD标志来调用clone建立的进程就是该进程的一个线程(即轻量级进程,Linux其实没有严格的进程概念),它们处于一个线程组,该线程组的所有线程的...pid时候,只需要查找pidmap位图即可 那么最终,linux下进程命名空间和进程的关系结构如下: ?...内核是如何设计task_struct中进程ID相关数据结构的 Linux 内核在设计管理ID的数据结构时,要充分考虑以下因素: 如何快速地根据进程的 task_struct、ID类型、命名空间找到局部ID

    7.1K10

    【Linux】进程的程序替换

    让子进程执行父进程的一部分代码 红框中的代码实际上是父进程的代码,在没有执行fork之前代码就有了,在没有创建子进程之前,父进程的代码加载到内存了,子进程被创建出来是没有独立的代码,这个代码是父进程的代码...,父进程通过if判断分流让子进程去跑了 2.创建一个子进程不执行父进程的代码,而是让子进程在磁盘当中执行全新的程序,这种操作称之为进程的程序替换 2.了解程序是如何进行替换的 程序替换函数 execl...所以ls程序是在磁盘上的 ---- 前面执行的是自己代码的一部分,当调用execl时,将磁盘中可执行程序替换当前进程的代码和数据 后半部分就不执行自己的代码了,执行ls所对应的代码 ,这个现象就叫做程序替换...,让子进程调用execl,在调用execl把代码和数据加载到内存 所以当创建进程的时候,先有进程数据结构,再加载代码和数据 程序替换是整体替换,不是局部替换 修改test.c文件内容如下 #include...页表 也会自己的映射关系 虽然代码有可能是跟父进程共享,当子进程进行程序替换的时候,子进程会加载新进程的代码和数据 操作系统会发生写时拷贝,将代码和数据进行区分 ,使子进程形成新的映射关系

    2.8K30
    领券