外部碎片、进程描述符、内部碎片

外部碎片:

是由于用户进程向内存频繁申请和释放内存空间所产出的空闲内存容量。伙伴算法解决的就是这个问题,解决的方法其实就是有伙伴算法的算法设计方法来决定,比如伙伴算法中的合并和切割方式,不够则申请大的空间,但会先切割后再分配出去,剩余的有可能因伙伴关系合并,并成更大的空闲空间,这是一种解决碎片的方式,另一种方式是释放时,也会因为释放后的空闲空间有可能形成伙伴而继续合并,这样就将零零碎碎的空闲空间内存慢慢合并成大的空闲空间,事外部碎片尽量减少。

进程描述符:

即task_struct进程结构体,每一个进程一创建,首先必须创建一个task_struct,因为系统每时每刻都会有大量的进程存在,即会有大量的进程随时会被创建(申请内存)或者消亡(释放内存),因此,每个task_struct的创建与释放是很频繁的。

内部碎片:类似task_struct这样的进程结构体,所需的内存容量是非常小的,一页4kb,而一个task_struct一般是甚至有些才1-2kb,甚至有些只需要几十或几百b,离一页远远不足,这么小的内存申请,而次数又那样的频繁,则会形成的碎片称为内碎片,因为碎片的容量较小,但如果次数过于频繁,积少成多形成的碎片容量也是不容小看的。

进程结构体的存在着很多相同或类似的操作,这些操作其实没有必要每次每一个进程一创建就得重头去创建。

时间: 2024-10-10 11:12:33

外部碎片、进程描述符、内部碎片的相关文章

Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】

Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在include/linux/sched.h文件中. 谈到task_struct结构体,可以说她是linux内核源码中最复杂的一个结构体了,成员之多,占用内存之大. 进程状态 /* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state().

进程与进程描述符(task_struct)

一. 进程 进程(Process) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. --------------------------------------------------------------- 释义:一段程序的执行过程 特征:动态.独立.异步.并发 结构特征

进程管理—进程描述符(task_struct)

http://blog.csdn.net/qq_26768741/article/details/54348586 当把一个程序加载到内存当中,此时,这个时候就有了进程,关于进程,有一个相关的叫做进程控制块(PCB),这个是系统为了方便进行管理进程所设置的一个数据结构,通过PCB,就可以记录进程的特征以及一些信息. 内核当中使用进程描述符task_struct. 这个task_struct就是一个定义的一个结构体,通过这个结构体,可以对进程的所有的相关的信息进行维护,对进程进行管理. 接下来我们

进程描述符task_struct

1.进程状态 [cpp] view plain copy volatile long state; int exit_state; state成员的可能取值如下: [cpp] view plain copy #define TASK_RUNNING        0 #define TASK_INTERRUPTIBLE  1 #define TASK_UNINTERRUPTIBLE    2 #define __TASK_STOPPED      4 #define __TASK_TRACED 

Linux 进程描述符 task struct

大家都知道进程,可是知道linux是怎么管理其进程的吗?每一个进程都有一个进程描述符,具体是task_struct结构体存储相关的信息,在linux/sched.h文件里定义,那么我们先看看linux内核3.0版本的task_struct结构体的定义吧(删除了不必要的字段,只保留了重要的字段).同时欢迎大家转载和交流. struct task_struct {       //这个是进程的运行时状态,-1代表不可运行,0代表可运行,>0代表已停止.  volatile longstate;  

进程—进程描述符展开

进程-从进程描述符展开(一) 进程内核栈结构:union task_union 在../include/linux/sched.h中定义了如下一个联合结构用来创建内核栈空间. //../include/linux/sched.h union task_union { struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)]; }: 线程描述符:struct thread_info 每一个进程都有一个

进程描述符

进程描述 广义上讲,所有进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合. 进程控制块 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体. task_struct结构体 task_struct是Linux内核下的一种数据结构,它会被装载到RAM里并且包含着进程的信息,每个进程把它的信息放在task_struct结构体里task_struct包含了这些内容: 标示符:描述本进程的唯一标示符 状态:任务状

Linux报错-bash: fork: retry: Resource temporarily unavailable和进程描述符之间的关系

在公司服务器上切换用户,出现 "-bash: fork: retry: Resource temporarily unavailable"这样的报错,查询得知是普通用户能够使用的进程数太少和文件描述符太小导致的,每一个文件描述符会和一个文件对应,但是很多文件描述符也会和一个文件对应.相同的文件可以被不同的进程打开,也可以被同一个进程打开多次.我们可以从系统层面和进程层面来查看相应的文件描述符. 一,系统层面的文件描述符 涉及到系统层面的,基本上都是通过修改内核参数来实现的,修改系统中的

进程—内存描述符(mm_struct)

http://blog.csdn.net/qq_26768741/article/details/54375524 前言 上一篇我们谈论了task_struct这个结构体,它被叫做进程描述符,内部成员包含了很多与进程相关的信息,今天我们来看一下其中一个被叫做内存描述符的结构体--mm_struct,抽象的来描述linux下进程的地址空间的所有的信息. 1.概述 一个进程的虚拟地址空间主要由两个数据结来描述.一个是最高层次的:mm_struct,一个是较高层次的:vm_area_structs.最