一、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. C#List<string>和string[]之间的相互转换

     一.LIST概述 所属命名空间:System.Collections.Generic      public class List<T> : IList<T>, IColle ...

  2. Exercise : Softmax Regression

    Step 0: Initialize constants and parameters Step 1: Load data Step 2: Implement softmaxCost Implemen ...

  3. 下载新浪android SDK

    下载新浪android SDK 必须去官网 开放平台下载 http://open.weibo.com/ 下载SDK 点击进入之后,看到的界面例如以下: 然后下载android SDK就可以.假设基于别 ...

  4. AIX中经常使用的SMIT 的使用

    AIX中经常使用的SMIT 的使用 1.  smit 的日志文件 (1)$HOME/smit.log      记录了所訪问的全部菜单.对话内容,所运行的命令和输出结果 在 SMIT 会话中出现的全部 ...

  5. 如何使用Linux套接字?

          我们知道许多应用程序,例如E-mail.Web和即时通信都依靠网络才能实现.这些应用程序中的每一个都依赖一种特定的网络协议,但每个协议都使用相同的常规网络传输方法.许多人都没有意识到网络协 ...

  6. HDU5126 stars(CDQ分治)

    传送门 大意: 向三维空间中加点,询问一个三维区间中点的个数. 解题思路: 带修改CDQ,将修改和询问一起插入CDQ分治询问. (询问可以由8个前缀和加减操作实现) 其中第一层CDQ维护x有序. 第二 ...

  7. MFC只允许程序单开

    很多玩游戏的人都知道一般游戏客户端程序是不允许双开的,就是说在同一游戏在启动的时候,是无法打开多个窗口.很多其他软件如酷狗播放器等也是这样.如果把打开的窗口最小化,这时重新启动程序,最小化的窗口会被显 ...

  8. CISP/CISA 每日一题 六

    CISA 每日一题(答) 采用电子数据交换 EDI 的好处: 1.较少的书面工作: 2.较少的信息交换错误: 3.改善了数据库到数据库.公司到公司的信息流: 4.没有多余的数据重新键入: 5.较少的通 ...

  9. 【Good Bye 2017 A】New Year and Counting Cards

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 是元音字母或者是奇数就递增. [代码] #include <bits/stdc++.h> using namespace ...

  10. 代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件)

    package com.flong.codegenerator; import java.sql.Connection; import java.sql.DatabaseMetaData; impor ...