本节目标:

  • 什么是程序
  • 什么是进程
  • 进程数据结构
  • 进程与程序区别与联系

一,什么是程序?

程序是完成特定任务的一系列指令集合

二,什么是进程?

  • 从用户的角度来看进程是程序的一次动态执行过程
  • 从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。
  • 进程是资源分配的最小单位
  • 每一个进程都有自己独立的地址空间与执行状态。
  • 像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程

三,进程数据结构

进程的静态描述:由三部分组成:PCB、有关程序段和该程序段对其进行操作的数据结构集。

进程控制块(PCB):用于描述进程情况及控制进程运行所需的全部信息,是操作系统用来感知进存在的一个重要数据结构。

代码段:是进程中能被进程调度程序在CPU上执行的程序代码段。

数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据

进程=代码段(编译后形成的一些指令)+数据段(程序运行时需要的数据)+堆栈段(程序运行时动态分配的一些内存)+PCB(进程信息,状态标识等)

数据段包括:

  • 只读数据段:常量
  • 已初始化数据段:全局变量,静态变量
  • 位初始化数据段(bss)(0初始化段):未初始化的全局变量和静态变量(实际上不分配内存,因为都为0,只有一些标记信息)

四,进程与程序区别与联系

  • 进程是动态的,程序是静态的
  • 进程的生命周期是相对短暂的,而程序是永久的。
  • 进程数据结构PCB
  • 一个进程只能对应一个程序,一个程序可以对应多个进程。

linux系统编程之进程(一):进程与程序的更多相关文章

  1. Linux系统编程(8)—— 进程之进程控制函数fork

    fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先 ...

  2. Linux系统编程(7)—— 进程之进程概述

    我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体.现在我们全面了解一下其中都有哪些信息. 进程id.系统中每个进程有 ...

  3. Linux系统编程(9)—— 进程之进程控制函数exec系列函数

    在Linux中,并不存在exec()函数,exec指的是一组函数,一共有6个,分别是: #include <unistd.h> extern char **environ; int exe ...

  4. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  5. linux系统编程之进程(一)

    今天起,开始学习linux系统编程中的另一个新的知识点----进程,在学习进程之前,有很多关于进程的概念需要了解,但是,概念是很枯燥的,也是让人很容易迷糊的,所以,先抛开这些抽象的概念,以实际编码来熟 ...

  6. Linux系统编程@进程管理(二)

    1.创建守护进程(Deamon) 守护进程的概念与作用 后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止.系统装入两种启动方式:1从启动脚本.etc/ ...

  7. 构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)

    构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study ...

  8. Linux系统编程温故知新系列 --- 01

    1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...

  9. LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题

    19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...

  10. Linux系统编程-setitimer函数

    功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能. 头文件:sys/time.h 函数原型: int setitimer(int which, cons ...

随机推荐

  1. Dungeon Game (GRAPH - DP)

    QUESTION The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a ...

  2. centos7下源码安装mysql5.7.16

    一.下载源码包下载mysql源码包 http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.16.tar.gz 二.安装约定: 用户名:mysql 安装目录 ...

  3. git(常用命令)思维导图...

    Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. 来自文章:http://www.cnblogs.com/1-2-3/archive ...

  4. mysql简单实现查询结果添加序列号的方法

    方法1: SELECT @rownum :=@rownum + 1 AS rownum, t.* FROM integral_system_user t, (SELECT @rownum := 0) ...

  5. 骗分大法之-----分块||迷之线段树例题a

    什么是分块呢? 就是一种可以帮你骗到不少分的神奇的算法. 分块的写法有几种,我所知道的有①预处理②不预处理 不预处理的代码我看得一脸懵逼 所以我在这里就谈一下预处理的版本www 首先看一道题: 给定一 ...

  6. mathematica里面清除全部变量

    基本在一个独立代码开始都写: Clear["Global`*"]  (*Clear all variables*) 就可以了

  7. JAVA对字符串的压缩与解压缩

    import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException; ...

  8. Confluence无法打开编辑器,一直在转圈

    在管理员界面中,将Collaborative editing 设置为Off 或者 Limited . 快速找到该界面的方式是,在搜索框里搜索 “Collaborative editing”. 折腾了几 ...

  9. python之BeautifulSoup模块

    # 名称修改(bs4) from bs4 import BeautifulSoup 帮助文档 Beautiful Soup parses a (possibly invalid) XML or HTM ...

  10. 外网不能访问阿里云服务器的apache服务

    今天弄了下Ubuntu的服务器,配置了一个LAMP环境的服务器,配置有时间我再来说 但是配置了很长的时间,差不都怕是好几个小时 在配置apache的时候,出现了问题,好不容易把apache服务配置好 ...