读书人

[linux]历程管理内存管理文件系统

发布时间: 2012-07-15 20:11:35 作者: rapoo

[linux]进程管理,内存管理,文件系统,系统管理,网络操作概述

进程/线程?

???进程概念:进程/线程是计算机中最小的执行单元,是实现分时多用户操作系统的基础;那么一个进程在linux中是如何实现的呢?如果熟悉内核就知道内核就是一堆的数据结构,一个进程的所有状态就包含在task_struck这个结构中:存放进程的状态,文件/socket描述符,程序地址(stask/heap);时间片;ddl地址;权限信息等等信息;
?

?

?

? linux中的进程就是一个链表;进程和子进程有父子关系,进程号为1的进程为init; 进程创建子进程是运用:写时复制的原则;

?? 线程概念:?一个进程可以包含许多线程;一个进程的各线程可以方便共享内存;线程创建时只创建一个属于本线程的栈空间;

?? 命令: ps -ef ; ps -eLf ;pstree; pidstat;

?? 进程的状态:running;stopped,uninterruptible; interruptitble; sleeping;zombie;

?? 进程的销毁:进程销毁时会释放所有的数据结构(释放文件/socket句柄,内存等等),释放完后会发送一个信号给父进程,此时子进程为僵尸状态;父进程回应此信号,子进程才彻底销毁;如果父进程没有响应此信号,子进程状态会变成僵尸状态;

? ? 进程的调度: linux 是抢占式的调度策略,即正在cpu上运行的进程是随时可以被其他进程抢占的。 那么linux是如何调度进程是非常重要的;linux内核依据进程的优先级(实时优先级)和进程是属于cpu敏感还是I/O敏感型的分配不同长短的时间片; 可以说进程的调度策略是动态智能化的;进程调度的算法时间复杂度是O(1),通过为进程的不同的优先级创建对应的数组,即一个优先级对应一个数组;相同的优先级用队列存储,并有一个二进制位图来常量时间从数组中查找到将要调度的优先级队列。巧妙的用空间换取时间,最大的提高调度性能。

上下文切换

是指进程/线程的上下文切换(context switch) ; 上下文切换由linux内核完成将当前正在运行的进程上下文信息从寄存器中卸载下来到进程堆栈中暂存,然后Load新的进程到寄存器,高速缓存中开始执行。所以说上下文切换频繁是最影响程序的性能的因素之一。?如下图:

??????????????

[linux]历程管理,内存管理,文件系统,系统管理,网络操作概述
?
?

?

降低上下文切换频率是提高进程性能的关键; 对于我们的网络服务器来说,大量的客户请求随时都大量涌入服务器,cpu频繁响应网络中断会对我们的应用程序性能产生极大的影响。 如何避免频繁的上下文切换呢? 除了提高进程的优先级外; smp内核提供了亲和度这一技术,将网络中断亲和到一个CPU上去。 这样频繁的中断就不会干扰其他CPU上的应用进程的执行;

? ? ? ?查看上下文切换频率:pidstat -w 或者 vmstat; 查看亲和度设置:?cat /proc/irq/$irq/smp_affinity

内存管理

linux的将内存分为kernel space 和 user space 两部分; 对于32bit 系统来说,kernel space为 1G ,user space 为3G; Linux内核的代码直接物理访问kernel space,不允许应用程序访问kernel-space;?

? ? ? ? Linux的设计考虑“安全性” 和 “多进程并发” 执行2方面考虑, 将user-space虚拟化,这样和内核空间隔离,每个进程在创建时都拥有自己的独立的虚拟进程地址空间(和其他进程地址空间互不干扰);虚拟进程空间大小拥有3G;这样每个进程看上去拥有3G的可访问内存空间一样;可以说没有内存的虚拟化,就没有并发运行的进程,也就没有多用户支持。

? ? ? ?linux是如何分配内存的呢?: 内核是以页为单位分配内存的,页的大小一般为4kb,8kb等。 进程创建时,应用程序申请的内存(堆),都是虚拟内存地址而已,进程运行时,真正访问这块内存时,如果这块内存未曾申请过物理内存或者这块内存不在物理内存中(swap) . 进程会陷入内核态(系统调用),并产生一个page fault异常,然后申请物理内存,并和虚拟内存映射起来。

? ? 虚拟内存是如何映射到物理内存的呢?每个进程都有一张page table 维护虚拟内存到物理内存的映射关系;cpu在执行代码时先通过MMU将虚拟内存转换为物理内存,然后访问内存地址。Linux内核还通过TLB这个数据结构来对虚拟内存到物理内存的映射进行一个缓存。如下图:


[linux]历程管理,内存管理,文件系统,系统管理,网络操作概述
?

?

?

?命令: 查看进程虚拟内存分布:cat /proc/$pid/maps ;查看page fault的情况:pidstat -r ;?

文件

?????? linux依靠的文件子系统屏蔽了各种不同文件系统的实现;给应用程序操作文件系统提供统一api; 并且文件系统会维护一个cache在memory中,并根据LRU算法来缓存文件内容;内核线程pdflush定期或cache占用memory占用一定百分比会被触发,将cache的内容写入disk; 如下图:

?????
[linux]历程管理,内存管理,文件系统,系统管理,网络操作概述
?

????? 常用的文件系统有:ext3, xfs,jf (各文件系统适合不同的使用场景,表现出优越的性能)

?????? 命令:fsck,fdisk,mount -t ext3 /dev/sda /home/xxx; umount /home/xxx;iostat;sar;

??????
linux的层次是结构如下图, 系统的硬件资源cpu/memory/io/disk等都是有内核统一管理,应用层程序要使用这些资源必须调用内核;应用层调用内核的功能是通过系统调用(system call)完成的:
[linux]历程管理,内存管理,文件系统,系统管理,网络操作概述
????????
?

? ? ? ?网络连接分为 : 监听连接和传输连接; 比如apache的LINSTEN连接监听在80端口上等待客户请求,客户请求过来后,监听连接会和客户端请求建立三次握手后,将连接扔给工作线程去处理此请求,此时客户端请求和worder线程建立ESTABLISHED状态,进行数据的传输。

? ? ?命令:netstat,traceroute,ifconfig; dig ; hostname;

?

?

读书人网 >UNIXLINUX

热点推荐