进程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.

企鹅小屋6折年付240元起,美国CN2 GIA VPS促销,独享CPU,三网回程CN2 GIA

企鹅小屋怎么样?企鹅小屋最近针对自己的美国cn2 gia套餐推出了2个优惠码:月付7折和年付6折,独享CPU,100%性能,三网回程CN2 GIA网络,100Mbps峰值带宽,用完优惠码1G内存套餐是年付240元,线路方面三网回程CN2 GIA。如果新购IP不能正常使用,请在开通时间60分钟内工单VPS技术部门更换正常IP;特价主机不支持退款。点击进入:企鹅小屋官网地址企鹅小屋优惠码:年付6折优惠...

CloudCone:$17.99/年KVM-1GB/50GB/1TB/洛杉矶MC机房

CloudCone在月初发了个邮件,表示上新了一个系列VPS主机,采用SSD缓存磁盘,支持下单购买额外的CPU、内存和硬盘资源,最低年付17.99美元起。CloudCone成立于2017年,提供VPS和独立服务器租用,深耕洛杉矶MC机房,最初提供按小时计费随时退回,给自己弄回一大堆中国不能访问的IP,现在已经取消了随时删除了,不过他的VPS主机价格不贵,支持购买额外IP,还支持购买高防IP。下面列...

pacificrack:超级秒杀,VPS低至$7.2/年,美国洛杉矶VPS,1Gbps带宽

pacificrack又追加了3款特价便宜vps搞促销,而且是直接7折优惠(一次性),低至年付7.2美元。这是本月第3波便宜vps了。熟悉pacificrack的知道机房是QN的洛杉矶,接入1Gbps带宽,KVM虚拟,纯SSD RAID10,自带一个IPv4。官方网站:https://pacificrack.com支持PayPal、支付宝等方式付款7折秒杀优惠码:R3UWUYF01T内存CPUSS...

linux内存管理为你推荐
.net虚拟主机虚拟主机 net framework 1.1/2.0/3.5 什么意思?域名主机电脑域名是什么jsp虚拟空间自己组建jsp虚拟主机运营,技术方面有哪些要求?下载虚拟主机怎么安装虚拟机jsp虚拟主机java虚拟主机空间怎么选择,国内jsp虚拟主机比较稳定,现在java项目做好后需要推荐一下吧虚拟主机提供商那个提供商的虚拟主机比较便宜,不要小牌子,服务要好域名网站有免费的网站域名吗备案域名网站备案分为哪几种?域名备案跟网站备案有什么不同?域名交易域名过户办理流程/怎样办理域名过户?如何申请域名如何申请网站域名
香港服务器租用 欧洲欧洲vps 免费申请域名 budgetvm sharktech flashfxp怎么用 国外主机 ion siteground 账号泄露 512m 网站实时监控 河南服务器 web服务器安全 申请网页 1元域名 独享主机 带宽租赁 下载速度测试 华为k3 更多