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怎么样?atcloud刚刚发布了最新的8折优惠码,该商家主要提供常规cloud(VPS)和storage(大硬盘存储)系列VPS,其数据中心分布在美国(俄勒冈、弗吉尼亚)、加拿大、英国、法国、德国、新加坡,所有VPS默认提供480Gbps的超高DDoS防御。Atcloud高防VPS。atcloud.net,2020年成立,主要提供基于KVM虚拟架构的VPS、只能DNS解析、域名、SS...
小白云是一家国人自营的企业IDC,主营国内外VPS,致力于让每一个用户都能轻松、快速、经济地享受高端的服务,成立于2019年,拥有国内大带宽高防御的特点,专注于DDoS/CC等攻击的防护;海外线路精选纯CN2线路,以确保用户体验的首选线路,商家线上多名客服一对一解决处理用户的问题,提供7*24无人全自动化服务。商家承诺绝不超开,以用户体验为中心为用提供服务,一直坚持主打以产品质量用户体验性以及高效...
特网云为您提供高速、稳定、安全、弹性的云计算服务计算、存储、监控、安全,完善的云产品满足您的一切所需,深耕云计算领域10余年;我们拥有前沿的核心技术,始终致力于为政府机构、企业组织和个人开发者提供稳定、安全、可靠、高性价比的云计算产品与服务。公司名:珠海市特网科技有限公司官方网站:https://www.56dr.com特网云为您提供高速、稳定、安全、弹性的云计算服务 计算、存储、监控、安全,完善...