进程Linux内核的进程调度策略和内存管理.doc

linux内存管理  时间:2021-01-15  阅读:()

Linux内核的进程调度策略和内存管理

内存是Linux内核所管理的最重要的资源之一内存管理系统是操作系统中最为重要的部分。对于Unux的初学者来说熟悉Unux的内存管理非常重要。

进程是运行于虚拟地址空间的一个程序。可以说任何在Linux系统下运行的程序都是进程。Linux系统中包括交互进程和批处理进程。交互进程是由Shel l控制和运行的既可以在前台运行也可以在后台运行。批处理进程不属于某个终端被提交到一个队列中以便顺序执行。大多数的进程都需要虚拟内存。

Linux进程屮最知名的属性就是它的进程号(Process Identity Number, PID)以某父进程号(ParentProcess ID PPID) 。 PID、 PPID都是非零正整数。一个PID唯一地标识一个进程。 —个进程创建新进程称力创建了子进程(Chi ld Process) 创建子进程的进程称力父进程。所有进程追溯其祖先最终都会落到进程号为1的进程身上这个进程叫做init进程是内核自举后第一个启动的进程。 Init 进程的作用是扮演终结父进程的角色。因为init进程永远不会被终止所以系统总是确信它的存在并在必要时以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为其父进程。通过执行ps-af 命令可以列出许多父进程ID为1的进程。 Linux提供了一条pstree命令允许用户查看系统内正在运行的各个进程之间的继承关系。直接在命令行输入pstree,程序会以树状结构方式列fl i系统中正在运行的各进程之间的继承关系。

关键词l inux;进程调度调度策略内存管理

Linux kernel process schedul ing and memorymanagement

Abstract:

Linux kernel memory is managed by one of the most important resources,memory management system is the most important part of the operating system.For Linux beginners to be fami l iarwith Linux’s memory management is very important.

Linux kernel memory is managed by one of the most important resources,memory management system is the most important part of the operating system.For Linux beginners to be fami l iar with Linux is memory management is very important.Process is running on a virtual address space of a program.Can be said that any program running under Linuxsystem is the process. Linux system, including the interactive process and the batch process.Interactive process is control led and run by the Shel l ,both running in the foreground,you can also run in the background.Batch process does not belong to a terminal , to be submitted to a queue for order execution.Most of the process requires virtual memory bstract.

Linux is best-known properties of the process is its process ID(Process Identity Number,

PID) to the parent process ID(Parent Process ID, PPID). PID, PPID is non-zero positive

integer.A PID uniquely identifies a process.Create a new process, a process known as creating a chi ld process (Chi ld Process), the process of creating the chi ld process is cal led parent.Al l processes wi l l eventual ly fal l back to their ancestral process of the process number 1 , the body, this process is cal led init process is the kernel bootstrap process started after the first. Init process is playing the role of the end of the role of the parent process.Because the init process is never terminated,so the system is always convinced that it exists,and,where necessary to it as a reference. If a process in which al l derived from the chi ld process is terminated before the end, there wi l l have to init forthe reference situation.At this point those who have lost a parent on the chi ld process to init as the parent process wi l l be.Through the implementation of the ps-af command, you can l ist a number of parent process ID as a process.Linux provides a pstree command,al lowing users to view system and each process is running between the inheritance.Directly on the command l ine input pstree,procedures wi l l be l isted in the system tree structure means the process of running the inheritance relationship between.

Key words:l inux;Process schedul ing;Schedul ing strategy;Memory management

内存是Linux内核所管理的最重要的资源之一内存管理系统是操作系统中最为重要的部分。对于Linux的初学者来说熟悉Linux的内存管理非常重要。

进程是运行于虚拟地址空间的一个程序。可以说任何在Linux系统下运行的程序都是进程。Linux系统中包括交互进程和批处理进程。交互进程是由Shel l控制和运行的既可以在前台运行也可以在后台运行。批处理进程不属于某个终端被提交到一个队列中以便顺序执行。大多数的进程都需要虚拟内存。

Linux进程中最知名的属性就是它的进程号(Process Identity Number, PID)以其父进程号(Parent Process ID, PPID) 。 PID、 PPID都是非零正整数。一个PID唯一地标识一个进程。 一个进程创建新进程称为创建了子进程(Chi ld Process) 创建子进程的进程称为父进程。所有进程追潮其祖先最终都会落到进程号力1的进程身上这个进程叫做init进程是内核自举后第一个启动的进程。 Init进程的作用是扮演终结父进程的角色。因为init进程永远不会被终止所以系统总是确信它的存在并在必要时以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止就会出现必须以init 为参照的情况。此时那些失去了父进程的子进程就都会以init作为其父进程。通过执行ps-af命令可以列出许多父进程ID为1的进程。 Linux提供了一条pstree命令允许用户查看系统闪正在运行的各个进程之间的继承关系。直接在命令行输入pstree程序会以树状结构方式列出系统中正在运行的各进程之间的继承关系。

一调度时机

内核屮进程自己通过系统调用scheduleO或者schedule_timeout

( ) 自愿放弃 CPU,让 CPU 调度其他的 进程。

( schedule_t imeout ( )可以指定放弃CPU的时间)

1 :向愿调度:

—►用户空间进6通过系统调用pauseO或者nanosleepO而自愿放弃

CPU。 nano s l e ep  也可以指定放弃CPU的时间 此外

Sleep   A Sleep_on  是库函数不是系统调用 最终

也是通过系统调用实现放弃CPU

2:自愿调度

主要发生在系统从内核态返回到用户态时即从系统空间返回到用户空间 主要发生以下儿种情况用户进程进行系统调用返回时系统调用在系统空间屮完成 屮处理完成时屮断处理也是在系统空间 异常处理完成时异常处理也在系统空间 。

CPU每次从系统空间返回到用户空间吋都会进行一次进程调度。此外每次吋钟中断产生时发现当前运行进程的时间片超时也会进行一次进程调度这也是L I NUX系统巾各个进程都能够得到执行的原因否则如果某个进程不进行系统调用A身运行有没有异常 又不自愿放弃CPU,系统屮又没有屮断则该进程会一直等到时间片用完为止 。也就是说,强制进程调度只发生在用户空间绝对不会发生在系统空间屮。

二调度方式 “有条件可剥夺”方式。

通过以上调度时机的分析可见L I NUX内核使用的是“有条件可剥夺”方式的进程调度当系统运行在系统空间时是不可己被剥夺的但是一旦系统从系统空间返回返回到用户空间时当前进程就有可能被剥夺CPU的占用权。

三调度策略 “以进程各自的优先级和调度策略“为基础的调度策略。

1 总的调度策略系统会根据每个进程的优先级和它所采用的调度策略通过某种算法计算出各个进程的一个运行“权值” 系统每次调度时就根据这个权值进行调度权值最高的最先被调度。但是这个权值并不是一成不变的而是随着被执行进程执行的时间而递减这样原来权伉较低的进程也可以有机会得到执行保证进程调度的“公正”性 。 当所有进程的权值都减小到0时注意如果有线程采用下面将要提到的SCHED_F I EO或者 SCHED RR调度策略则不可能所有进程的权值都变成0,至少采用这两种调度策略的进程的权值最少会保持1000 系统就会重新计算一次所有进程的权值再次重复上述调度过程。

2进程自己的调度策略

为适应不同的需要L I NUX内核设计了三种不同的进程调度政策

SCHED_F I EO- - - - - - - -适用于对时间性要求比较强而且每次运行时所用的时间比较短实时应用程序适合这种策略。

SCHED_RR- - - - - - - - - - - “RR”是Round Robin 轮流的意思适合程序比较大每次运行都需要花费很长时间的进程。

SCHED_OTHER- - - - - -传统的调度策略适用于交互式得分时应用

此外各个进程可以通过系统调用schecLsetschedulerO设罝自己的调度策略。

四通过以上对L I NUX进程调度策略的分析可以得出这种调度策略不能保证实吋性要求,所以需要打个所谓的实时补丁包。

但是在目前不能改变调度策略的情况卜 要想提高实时性,可以采取以下措施

1 将CPU时间片划分的小一些。这样做的弊端是进程调度会很频繁增加因为进程调度而花

费的开销。

2实吋进程采用高的优先级 1一99 。

3实时进程采川SCHRD FTFO的调度策略但其中要又s l eep  等类似的操作。

Linux內存管理

进程是运行于虚拟地址空间的一个程序。可以说任何在Linux系统下运行的程序都是进程。Linux系统中包括交互进程和批处理进程。交互进程是由Shel l控制和运行的既可以在前台运行也可以在后台运行。批处理进程不属于某个终端被提交到一个队列中以便顺序执行。大多数的进

程都需要虚拟内存。

存储管理子系统是操作系统屮最重要的组成部分之一。在早期计算时代由于人们所需要的A 存数目远远人于物理内存因此设计出了各种各样的策略来解决此问题其中最成功的就是虚拟内存技术它使得系统中有限的物理内存竞争进程所需内存空间得到满足。 虚拟内存通过在各个进程之间共享内存而使系统看起來有多于实际内存的内存容量。Um i x支持虚拟内存就是使用磁盘作为RAM的扩展使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘腾出N存给其它目的。当原来的闪容又要使用时再读回内存。运行于Linux的程序只看到大S的可用内存而不关心哪部分在磁盘上。当然读写硬盘比真的内存慢大约慢千倍 所以程序运行较慢。用做虚拟内存的这部分硬盘叫对换空间。

虚拟内存技术不仅仅让我们可以使用更多的内存它还提供了下面这些功能

1 .巨大的寻址空间:操作系统让系统看上去有比实际内存大得多的内存空间。虚拟内存可以是系统屮实际物理空间的许多倍。每个进程运行在其•独立的虚拟地址空间屮这些虚拟空间相互之间都完全隔离开来所以进程间不会互相影响。同时硬件虚拟内存机构可以将内存的某些区域设置成不可写这样可以保护代码与数据不会受恶意程序的干扰。

2.公平的物理内存分配内存管理子系统允许系统屮每个运行的进程公平地共享系统屮的物理内存。

3.共享虚拟P、 j存:尽管虚拟内存允许进程有其独立的虚拟地址空间但有时也需要在进程之间共享内存。例如有可能系统中有儿个进程同时运行BASH命令外壳程序。为了避免在每个进程的虚拟内存空间内都存在BASH程序的拷W较好的解决办法是系统物理内存中只存在一份BASH的拷贝并在多个进程间共享。动态库则是另外一种进程间共享执行代码的方式。共享内存可用來作为进程间通信TPC的手段多个进程通过共享内存來交挽信息。 Linux支持SYSTEM V的共享内存I PC机制。

4.进程的保护系统中的每一个进程都有自己的虚拟地址空间。这些虚拟地址空间是完全分开的这样•一个进程的运行不会影响其它进程并且硬件上的虚拟内存机制是被保护的 内存不能被写入。这样可以防止迷失的应用程序覆盖代码的数据。

5.Linux虚拟内存实现机制:Linux虚拟内存的实现需要6种机制的支持:地址映射机制、 內存分配回收机制、缓存和刷新机制、请求页机制、交挽机制和力存共享机制。

P、 J存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址。当用户程序运行时如果发现程序中要用的虚地址没有对应的物理内存就发出了请求页要求。如果有空闲的内存可供分配就请求分配内存于是用到了内存的分配和回收 并把正在使用的物理页记录在缓存中使用了缓存机制 。如果没有足够的内存付供分配那么就调用交换机制腾出一部分內存。另外在地址映射屮要通过TLB翻译后援存储器来寻找物理页交换机制屮也要用到交挽缓存并且把物理页内容交换到交挽文件屮也要修改页表来映射文件地址。

6.虚拟内存容量设定:也许有人说虚拟内存容量的设定应该分配2倍于物理内存但这只是个规律。如果物理IA存比较小可以这样设定。如果有256MB物理内存或更多的话 就可以缩小虚拟内存。Unux会把大量的内存用做Cache 但在资源紧张时会收冋。只要看到swap为0,或者该数很小就可以放心了内存放着不用才是最大的浪费。

内存泄露和回收A存的方法

1. 内存泄漏的定义:一般常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的内存块的大小可以在程序运行期决定 、使川完后必须显示释放的内存。应用程序一般使用mal loc 、 real loc 、new等函数从堆屮分配到一块闪存使用完后程序必须负贵相应的调用free或delete释放该内存块。否则这块内存就不能被再次使用 我们就说这块内存泄漏了。

2.内存泄露的危害:从用户使用程序的角度来看内存泄漏本身不会产生什么危害。作为一般的用户根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积这会最终消耗尽系统所

有的A存。从这个角度来说一次性内存泄漏并没有什么危害因为它不会堆积。而隐式P、 j存泄漏危害性则非常大因为较之于常发性和偶发性A存泄漏它更难被检测到。存在内存泄漏问题的程序除了会占用更多的内存外还会使程序的性能急剧下降。对于服务器而言如果出现这种情况即使系统不崩溃也会严重影响使用。

3.内存泄露的检测和回收:对于内存溢出之类的麻烦大家可能在编写指针比较多的复杂程呼时就会遇到。在Linux或Un ix下C和C++语言是最常使用的工具。但是C++程抒缺乏相应的手段来检测P、 j存信息只能使用t o p指令观察进程的动态内存总额。而II程序退山吋我们无法获知任何内存泄漏信息。

使用Linux命令回收内存可以使用p s 、 ldll两个命令检测内存使用情况和进行回收。在使用超级用户权限时使用命令“p s”它会列出所有正在运行的程序名称和对应的进程号(P ID) 。kil l命令的工作原理是叫L inu x操作系统的㈧核送出一个系统操作信号和程序的进程号(P ID〉 。

结语:Linux进程中S知名的属性就是它的进程号(Process Identity Number,PID)以其父进程号(Parent Process ID,PPID) 。PID、PPID都是非零正整数。一个PID唯-地标识一个进程。一个进程创建新进程称为创建了子进程(Child Process)创建子进程的进程称为父进程。所有进程追溯苒祖先最终都会落到进程号为1的进程身上这个进程叫做init进程是内核自举后第一个启动的进程。 Ink进程的作用是扮演终结父进程的角色。因为in k进程永远不会被终止所以系统总是确信它的存在并在必要吋以它为参照。如果某个进程在它衍生出來的全部子进程结朿之前被终止就会出现必须以in it 为参照的情况。此时那些失去丫父进程的子进程就都会以init作为其父进程。通过执行p s-af命令可以列出许多父进程氾为1的进程。Linux提供了一条p stree命令允许用户查看系统内正在运行的各个进程之间的继承关系。直接在命令行输入p stree,程序会以树状结构方式列出系统中正在运行的各进程之间的继承关系。

[1]徐英慧马忠梅王磊王琳.ARM 9嵌入式系统没计[M].北京:北京航天航空大学出版社,2007.[21熊茂华杨振伦.ARM9嵌入式系统设计与开发应用[M].北京:淸华大学出版社2008.

[3] 耿徳根宋建国马潮等.AVR高速嵌入式单片机原理与应用[M].北京北京航天航空大学出版社 2001.

[4] 张琴琴兰金虎孙與.基于I2 C总线的ZLG7290与AVR单片机接口技术及应用[J].仪表技术与传感器.2005,9(41).

[5] 敖锋.ZLG7290在人机接口屮的应用[J].甘肃科技纵横.2007,36⑶.

[6] ARM Limited.ARM920T Technical Reference Manual.2000,2001.

Atcloud:全场8折优惠,美国/加拿大/英国/法国/德国/新加坡vps,500g大硬盘/2T流量/480G高防vps,$4/月

atcloud怎么样?atcloud刚刚发布了最新的8折优惠码,该商家主要提供常规cloud(VPS)和storage(大硬盘存储)系列VPS,其数据中心分布在美国(俄勒冈、弗吉尼亚)、加拿大、英国、法国、德国、新加坡,所有VPS默认提供480Gbps的超高DDoS防御。Atcloud高防VPS。atcloud.net,2020年成立,主要提供基于KVM虚拟架构的VPS、只能DNS解析、域名、SS...

小白云 (80元/月),四川德阳 4核2G,山东枣庄 4核2G,美国VPS20元/月起三网CN2

小白云是一家国人自营的企业IDC,主营国内外VPS,致力于让每一个用户都能轻松、快速、经济地享受高端的服务,成立于2019年,拥有国内大带宽高防御的特点,专注于DDoS/CC等攻击的防护;海外线路精选纯CN2线路,以确保用户体验的首选线路,商家线上多名客服一对一解决处理用户的问题,提供7*24无人全自动化服务。商家承诺绝不超开,以用户体验为中心为用提供服务,一直坚持主打以产品质量用户体验性以及高效...

特网云,美国独立物理服务器 Atom d525 4G 100M 40G防御 280元/月 香港站群 E3-1200V2 8G 10M 1500元/月

特网云为您提供高速、稳定、安全、弹性的云计算服务计算、存储、监控、安全,完善的云产品满足您的一切所需,深耕云计算领域10余年;我们拥有前沿的核心技术,始终致力于为政府机构、企业组织和个人开发者提供稳定、安全、可靠、高性价比的云计算产品与服务。公司名:珠海市特网科技有限公司官方网站:https://www.56dr.com特网云为您提供高速、稳定、安全、弹性的云计算服务 计算、存储、监控、安全,完善...

linux内存管理为你推荐
虚拟空间购买我想办个个人网站,虚拟空间怎么弄?请推荐一个建站工作室。虚拟主机服务器虚拟主机和站点服务器什么区别vps主机什么是vps主机网站域名一个网站要几个域名域名注册查询怎么查看域名是否注册域名备案什么是域名备案?asp虚拟空间ASP空间是什么意思?网站空间购买国内网站空间购买哪里的比较实惠啊?深圳网站空间菜鸟问:网站空间如何选择,与空间的基本知识?国外网站空间怎么样把网站空间放到国外去?
免费虚拟主机空间 宿迁服务器租用 中文域名交易中心 网易域名邮箱 牛人与腾讯客服对话 中国电信测速112 创梦 绍兴电信 常州联通宽带 环聊 360云服务 登陆空间 wordpress中文主题 申请免费空间 阿里云邮箱登陆地址 域名和主机 免费主页空间 沈阳idc 亿库 windows2008 更多