一、proc文件系统

传统意义上的文件系统是用于块设备上信息的存储,/proc这个目录是一个虚拟文件系统,它放置的数据都是在内存当中,所以这个目录本身不占用任何硬盘空间。主要包含如下系统信息:
内存管理
系统进程特征数据
文件系统
设备驱动程序
系统总线
电源管理
终端
系统控制参数

用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。

除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。

二、什么是进程

进程通常被定义为一个正在运行的程序实例,它由两个部分组成:一个组成部分是操作系统用来管理程序的内核对象。内核对象是系统用来存放关于进程统计信息的地方。另一个组成部分是地址空间,它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆栈分配空间。
进程运行过程,其实就是把磁盘的二进制文件加载(映射)到内存空间中,并且指引CPU去内存中寻址,然后计算,并且返回(I/O)的过程。
可以思考这样一个问题,现在我们硬盘上有三个文件xxx.exe,xxx.apk,xxx,操作系统是如何知道哪些文件是可执行文件呢?操作系统识别可执行文件的方式有两种,一种是在系统内核进行识别(比如linux和windows),另一种是在系统内库层使用虚拟机来实现。使用虚拟机就非常方便,我们可以在不修改内核的情况下修改和扩展虚拟机就可以实现跨平台。

三、进程的运行过程

1、将程序装载到内存(程序的实例化)
32位二进制系统最大寻址能力是 2^32 = 2^10 * 2^2 = 1G * 4 = 4G,所以我们的物理内存最大可以使用4G.假如我们现在同时开了100个进程播放电影,照样可以正常播放,这是为什么呢?事实上除了物理内存外,还有一个虚拟内存 
虚拟存储器是一个抽象的概念,它为每一个进程提供了一个假象,每个进程都在独占使用主存(硬盘)
 
虚拟地址空间如下:
(注:图摘自《深入理解计算机系统》)
地址空间最底部存放用户进程定义的代码和数据,对于所有的进程来说,代码是从同一个固定地址开始。接着就是全局变量和对应的数据位置,堆、共享库、栈。最上面是内核虚拟存储器,内核总是驻留在内存中,是操作系统的一部分,地址空间顶部的区域是为内核保留的,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数。
2、读取内存中的程序段内容,给变量分配空间,在调用的时候寻址操作
进程运行过程其实就是把磁盘的二进制文件映射到内存空间中并且指引CPU去内存中寻址,然后计算并且返回(I/O)的过程。
 #include <sys/types.h>
#include <unistd.h>
#include <stdio.h> int main(){
printf("hello PID:%d\n", getpid());
printf("hello ppid:%d\n", getppid());
char *p;
scanf("%s", p); return 0;
}

启动这个程序(进程)

可以看到这个进程的ID是1634,进程的父ID是1617,下面我们使用命令ps -aux来查看一下当前的进程,该进程的父进程是shell进程。
首先二进制程序getpid被linux系统识别,将该二进制文件放到内存中,处理器寻址并给变量分配内存空间(将函数和变量放到不同的区域),最后将结果输出。

四、进程运行过程中的两个特点

1、多任务,多进程“并发
我们的linux是多任务,分时的,一个独立的逻辑控制流,好像我们的程序独占的使用处理器,下面是CPU的进程调度图。
进程1,2,3,4,5,6......在运行过程中由CPU分配时间片段,上图的处理器就像转盘一样,当指向某个进程后就给该进程分配时间片,开始执行该进程,如此反复。
2、彼此独立、所处的内存隔绝
使用虚拟内存,每个进程都有一个私有的地址空间,好像我们的程序独占和使用内存。

五、进程的生命周期

对程序而言,进程有三大状态:运行、挂起、消亡。
 
1、建立任务(创建进程)
2、准备运行(等待CPU分配时间片)
3、正在运行(在实际的运行状态中,如果没有分配到cpu实际片,继续等待)
4、挂起(分为可打扰的和不可打扰的),比如scanf等待用户输入就是可打扰中断。
5、消亡(当任务终止,或者被父进程回收)

Android系统开发(8)——linx进程基本概念的更多相关文章

  1. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  2. 《Android系统开发》笔记

    <Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...

  3. Android 系统开发做什么?

    题外话 18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿.写作,实践.反 ...

  4. Android 系统回收资源时进程被杀的优先级

    http://developer.android.com/guide/components/processes-and-threads.html#Processes Android 操作系统的内存回收 ...

  5. Android系统开发--灯光系统之电池灯的流程分析

    Android系统开发--Android灯光系统之电池灯的流程分析 前期系统准备 运行初始化,创建系统服务 创建电池服务,获得电池灯;创建监听者监听上报电池事件: mSystemServiceMana ...

  6. Android系统开发实务实训

    实训项目 :               Android系统开发实务实训                           项目成品名称:         绝地坦克                 ...

  7. Android系统开发 编译系统签名的APP

    前言 一般情况下,我们使用的签名都是自己生成的Java签名来编译APP. 但是,如果需要开发一些特定设备的APP(对权限有更高的要求,需求一些系统基本的权限,比如让APP可以控制设备的休眠),那就需要 ...

  8. Android 系统开发学习杂记(转)

    http://blog.csdn.net/shagoo/article/details/6709430 > 开发环境1.安装 Eclipse 和 android-sdk 并解压安装2.Eclip ...

  9. 【Android 系统开发】Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  10. Android系统开发入门

    Android操作系统 Android是一个基于Linux.使用java作为程序接口的操作系统. 他提供了一些工具,比如编译器.调试器.还有他自己的仿真器(DVM — Dalvik Virtual M ...

随机推荐

  1. BZOJ3511: 土地划分(最小割)

    Description Y国有N座城市,并且有M条双向公路将这些城市连接起来,并且任意两个城市至少有一条路径可以互达. Y国的国王去世之后,他的两个儿子A和B都想成为新的国王,但他们都想让这个国家更加 ...

  2. RLF。HRLF解释

  3. Linux下的一个高速跳转到上N层文件夹的简单方法

    编辑文件 vim .bashrc  (使改动在当前用户下有效) 或者 vim /etc/profile (须要在root用户下运行,使改动在全部用户下有效) 在文件结尾加入别名 alias cd1=' ...

  4. nginx学习十一 nginx启动流程

    今天用了一天的时间看nginx的启动流程,流程还是非常复杂.基本的函数调用有十几个之多.通过看源代码和上网查资料,弄懂了一些函数.有些函数还在学习中,有些函数还待日后学习,这里记录一下今天所学.加油! ...

  5. 企业网管软件之SOLARWINDS实战-制作拓扑图

    企业网管软件之SOLARWINDS实战-制作拓扑图-开始 企业网管软件之SOLARWINDS实战-制作拓扑图 本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  6. Express简介、安装

    Express 基于Node.js平台,快速.开放.极简的web开发框架,是目前最流行的基于Node.js的web开发框架,它提供一系列强大的功能,比如: 路由控制 参数获取 send和sendFil ...

  7. HTML的SEO(搜索引擎优化)标准

    HTML的SEO(搜索引擎优化)标准 一.总结 这个做seo的时候要多看,做网站优化的时候 1. SEO(搜索引擎优化):通过总结搜索引擎的排名规律,对网站进行合理优化,使你的网站在百度和Google ...

  8. 1.15 Python基础知识 - 函数

    函数是可重用的程序代码段. 一.函数的声明和调用 声明格式: def 函数名([形参列表]): 函数体 调用格式: 函数名([实参列表]) 函数名:是一种标识符,命名规则为全小写字母,可以使用下划线增 ...

  9. Nginx配置GZIP

    记录一次解决网站加载慢的问题 一. nginx配置 gzip on;gzip_min_length  1k;gzip_buffers     4 16k;gzip_http_version 1.1;g ...

  10. [UWP]为什么ContentControl的ContentTemplate里放两个ContentPresenter会出问题(绕口)

    原文:[UWP]为什么ContentControl的ContentTemplate里放两个ContentPresenter会出问题(绕口) 1. 简单的HeaderedContentControl 上 ...