`
pengpeng
  • 浏览: 81969 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[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新的进程到寄存器,高速缓存中开始执行。所以说上下文切换频繁是最影响程序的性能的因素之一。 如下图:

              


 
 

 

降低上下文切换频率是提高进程性能的关键; 对于我们的网络服务器来说,大量的客户请求随时都大量涌入服务器,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这个数据结构来对虚拟内存到物理内存的映射进行一个缓存。如下图:



 

 

 

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

文件

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

     

 

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

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

      

系统(cpu/memory/硬盘/IO)

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

         那么系统调用是如何实现的呢? 当前大部分操作系统通过软中断实现。 应用程序调用内核函数时,会同时发送一个中断到cpu,cpu在中断向量表里找到此中断号对应的处理程序,从而执行内核代码。现在x86等cpu已经从硬件层开始支持系统调用这个功能,并且性能提升了不少。 因为一个程序的越少的系统调用性能越好。 通过命令strace yourexeapplication 可以看到你的可执行代码都调用了那些系统调用;

       现在常用的机器架构为SMP结构(即所有CPU共享L1/L2,memory,外设);区别与NUMA结构; 所以一个某一个瞬间一个进程/线程只会在一个核上运行;一个进程频繁的在不同的CPU上运行性能会降低;因为每个核之间不共享高速缓存,如果进程频繁在核之间切换,高速缓存命中率下降,严重影响性能;操作系统内核会保证一个进程尽量运行在一个核上,并保证每个核的负载均衡。我们知道cpu要频繁的响应中断,有些中断来了,cpu必须放下正在执行的进程去响应中断,比如对于web服务器网络流量很高的服务器,网络中断很频繁;操作系统提供一个亲和度算法将一个终端号绑定到一个核上。这样其他核就不会受中断影响,提高系统性能;cat 02 >> /proc/irq/xx/smp_affinity

      命令:top, uptime, vmstat; ps; pidstat;

网络(tcp/udp)

GNU/linux的自由性来源于网络,来源于网络各端的顶尖程序员一起完成的杰作。可以说没有tcp/ip就没有linux的蓬勃发展。 linux对网络的发展也无与伦比。linux2.6内核支持同步和异步网络I/O ; 对异步的支持让现在网络服务器可以支持更多的请求量。 比如apache通过epoll,让少量的worder线程池可以响应大量的请求。如下图:

     

 

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

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

 

 

  • 大小: 33.2 KB
  • 大小: 23.8 KB
  • 大小: 25.4 KB
  • 大小: 22.4 KB
  • 大小: 43.4 KB
  • 大小: 23.3 KB
分享到:
评论

相关推荐

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    操作系统原理及应用(LINUX).pdf

    各种内存管理及分配方法的思想、数据结构、重定位及实现原理,文件的逻辑结构、物理结构及文件系统的构成,操作系统对设备的控制、分配、缓冲区的管理等,Linux系统的网络功能,现代流行的UNIX、Windows2000操作系统...

    Linux操作系统原理与应用

    该文档有关Linux操作系统的基础知识,分为操作系统概述、内存寻址、进程、内存管理、中断和异常、系统调用、内核中的同步、文件系统和设备驱动八个章节。

    清华大学Linux操作系统原理与应用

    第1章 操作系统概述 1 1.1 认识操作系统 1 1.1.1 从使用者角度 1 1.1.2 从程序开发者角度 2 1.1.3 从操作系统在整个计算机系统中所处位置 2 1.1.4 从操作系统设计者的角度 3 1.2 操作系统的发展 4 1.2.1 操作系统的...

    linux操作系统分析与实践(北大)(1、2、3、4、5、7章)

    详细的分析了linux操作系统,包括概述、计算机硬件基础、进程管理、内存管理、文件管理、和linux驱动程序编写基础

    深入分析Linux内核源码.chm

    6.1 Linux的内存管理概述 6.2 Linux内存管理的初始化 6.3 内存的分配和回收 6.4 地址映射机制 6.5 请页机制 6.6 交换机制 6.7 缓存和刷新机制 6.8 进程的创建和执行 第七章 进程间通信 7.1 管道 7.2 信号(signal) ...

    内存管理内存管理内存管理

    中,那么操作系统将暂时停止您的进程,将其他内存转存到硬盘中,从硬盘上加载被请求的内存,然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,可以访问比您物理上安装的内存更多的内存。 ...

    LINUX原理与结构

    全书包括Linux概述、平台与工具、引导与初始化、中断处理、时钟管理、物理内存管理、进程管理、虚拟内存管理、互斥与同步、进程间通信、虚拟文件系统、物理文件系统、设备管理、电源管理等十四章,其主要内容已在...

    Android系统中的进程管理:进程的创建

    本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建。本文适合Android平台的应用程序开发者,也适合对于Android系统内部实现感兴趣的读者。Android系统以Linux内核为基础,所以对于进程的管理自然离不...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的接口1 1.1.3操作系统是资源管理器2 1.2UNIX系统的主要特性3 1.3UNIX系统的发展史4 1.4开源软件与UNIX的推广发展6 1.4.1开源...

    linux 内核源代码分析

    2.1 Linux内存管理的基本框架 2.2 地址映射的全过程 2.3 几个重要的数据结构和函数 2.4 越界访问 2.5 用户堆栈的扩展 2.6 物理页面的使用和周转 2.7 物理页面的分配 2.8 页面的定期换出 2. 9 页面的...

    Linux操作系统分析

    第1章 Linux操作系统概述 第2章 Linux系统的启动 第3章 中断和中断处理 第4章 内存管理 第5章 进程管理及进程间通讯 第6章第 硬件和设备驱动程序 第7章 文件系统 第8章 网络 第9章 模块的动态加载和系统配置 第10章 ...

    Linux 基础课程课件

    第1章 Linux系统概述 1.1 计算机基础知识 1.2 操作系统的功能 1.3 Linux系统的历史、现状和特点 1.4 Linux系统安装 1.5 安装工具软件和开发软件 1.6 Linux图形环境 第2章 Linux常用命令 2.1 使用命令 2.2 ...

    LINUX操作系统原理与应用

    操作系统概述 内存寻址 进程 内存管理 中断和异常 系统调用 内核中的同步 文件系统 设备驱动 陈莉君 康华著

    Linux操作系统分析 ppt

    第一章 Linux操作系统概述 第二章 Linux系统的启动 第三章 中断和中断处理 第四章 内存管理 第五章 进程管理及进程间通信 第六章 硬件和设备驱动程序 第七章 文件系统 第八章 网络 第九章 模块的动态加载和系统配置 ...

    linux网络编程-宋敬彬-part3

    第1章 Linux操作系统概述 2 1.1 Linux发展历史 2 1.1.1 Linux的诞生和发展 2 1.1.2 Linux名称的由来 3 1.2 Linux的发展要素 3 1.2.1 UNIX操作系统 4 1.2.2 Minix操作系统 4 1.2.3 POSIX 标准 4 1.3 ...

    linux网络编程-宋敬彬-part2

    第1章 Linux操作系统概述 2 1.1 Linux发展历史 2 1.1.1 Linux的诞生和发展 2 1.1.2 Linux名称的由来 3 1.2 Linux的发展要素 3 1.2.1 UNIX操作系统 4 1.2.2 Minix操作系统 4 1.2.3 POSIX 标准 4 1.3 ...

    嵌入式Linux应用程序开发标准教程(第2版全)

    7.1 Linux进程概述 7.1.1 进程的基本概念 7.1.2 Linux下的进程结构 7.1.3 Linux下进程的模式和类型 7.1.4 Linux下的进程管理 7.2 Linux进程控制编程 7.3 Linux守护进程 7.3.1 守护进程概述 7.3.2 编写守护进程 7.3.3...

Global site tag (gtag.js) - Google Analytics