Linux系统编程(一)

  • 一、进程和程序
  • 二、内存布局
    • 内核空间
    • 用户空间
  • 三、进程状态
  • 四、环境变量
  • 五、进程共享

一、进程和程序

程序:是指编译好的二进制文件,存储在磁盘中,不占用系统资源。

进程:是系统进行资源分配的基本单位,进程是活跃的程序,占用系统资源。在内存中执行。

两者关系:程序运行的时候,会产生进程。

二、内存布局

内存分为两个区域,一个是内核空间,另一个就是用户空间。

内核空间

进程陷入内核态后才能够访问的空间。内核中有一块PCB进程控制块,主要负责维护进程相关的信息。栈内存的申请和释放都由编译器自动完成,并且栈容量由系统预先定义的。栈从高地址到低地址增长。

用户空间

:栈用来存放临时创建的局部变量,如函数的参数、内部变量等。每调用一次函数,就会将参数压入进程调用栈中,调用结束后也会被返回栈中。同时,每调用一个函数就会创建一个新的栈,所以递归函数的时候会导致栈溢出
文件映射段:也叫共享区,文件映射段主要包括共享内存、动态链接库等共享资源,从低地址向高地址增长。
:堆用来存放动态分配的内存。堆内存由用户申请分配和释放,从低地址向高地址增长。
BSS:BSS段用来存放程序中未初始化的全局变量和静态变量。
数据段:数据段用来存放程序中已初始化全局变量与静态变量。
代码段:代码段用来存放程序执行代码,也可能包含一些只读的常量。这块区域的大小在程序运行时就已经确定,并且为了防止代码和常量遭到修改,代码段被设置为只读。

三、进程状态

进程基本的状态有5种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。

四、环境变量

环境变量,是指在操作系统中用来指定操作系统运行环境的一些参数
例如:ls实际上也是一个程序,但是为什么我们不需要加入完整的路径名/bin/ls呢?当我们执行的ls的时候,操作系统会现在环境变量中查找ls命令所在的目录/bin,然后执行该目录下的程序。

五、进程共享

fork函数


父子之间的共享遵循读时共享写时复制的原则,使用全局变量并不能进行父子进程间的数据共享。全局变量是存在data段的,父进程修改全局变量和子进程修改全局变量是在data段的不同内存空间修改的。

Linux系统编程(一)相关推荐

  1. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  2. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

  3. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  4. Linux系统编程——线程私有数据

    在多线程程序中.常常要用全局变量来实现多个函数间的数据共享.因为数据空间是共享的,因此全局变量也为全部线程共同拥有. 測试代码例如以下: #include <stdio.h> #inclu ...

  5. vbs结束进程代码_物联网学习教程—Linux系统编程之进程控制

    Linux系统编程之进程控制 一.结束进程 首先,我们回顾一下 C 语言中 continue, break, return 的作用: continue: 结束本次循环 break: 跳出整个循环,或跳 ...

  6. Linux 系统编程总结 (未完待续)

    前言 我记得去年说过要讲一些干货分享给大家,Linux 系统编程是linux 驱动开发入门的条件 有人说为什么? mmap select read write open ioctl socket po ...

  7. Linux系统编程之查看文件大小的方法(lseek_fseek_stat)

    Linux系统编程之查看文件大小的方法(lseek.fseek.stat)三种方法: #include <stdio.h> #include <fcntl.h> #includ ...

  8. Linux系统编程之进程与线程控制原语对比

    Linux系统编程之进程与线程控制原语对比 进程 线程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_can ...

  9. Linux系统编程之查看文件大小的方法(lseek and stat)

    Linux系统编程之查看文件大小的方法:1.使用lseek函数,2.使用stat函数.直接上代码 #include <stdio.h> #include <stdlib.h> ...

  10. linux线程并不真正并行,Linux系统编程学习札记(十二)线程1

    Linux系统编程学习笔记(十二)线程1 线程1: 线程和进程类似,但是线程之间能够共享更多的信息.一个进程中的所有线程可以共享进程文件描述符和内存. 有了多线程控制,我们可以把我们的程序设计成为在一 ...

最新文章

  1. 对分组交换(packet switching)高效迅速灵活可靠四个优点的理解
  2. 浅谈Java的输入输出流
  3. MYSQL:子查询关键字 ANY/SOME/IN/ALL
  4. 关于Android 传感器坐标与读数的进一步讨论
  5. 软件系统架构~软件架构概念
  6. sklearn文档-第一次笔记
  7. 年轻人有梦想,老人有回忆
  8. 微课|中学生可以这样学Python(例7.2):三维向量类
  9. james邮件服务器的用户信息添加
  10. PDF背景怎么添加,如何修改PDF背景
  11. Mybatis Sql 大于号小于号不兼容
  12. Java最新JDK和API下载(持续同步更新于官网)
  13. icmp数据包BE、LE解释
  14. TCL语言中的执行顺序
  15. 计算机会计应用实训,大学excel在会计中的应用的实训心得
  16. java中vo_java中的vo是什么
  17. MFC之对于文档类的DeleteContents和OnNewDocument说明29
  18. matlab幼苗识别,基于MATLAB的植物幼苗识别
  19. 2014-04《信息资源管理 02378》真卷解析,逐题解析+背诵技巧
  20. 网吧服务器软件维护合同范本,网吧电脑维护合同范本

热门文章

  1. 常用的好用的window工具
  2. 停止Hadoop或HBase集群的脚本
  3. Cassandra1.2文档学习(7)—— 规划集群部署
  4. EMF的一些总结(2)——关于EMF的序列化
  5. java创建方法并引用_java – 创建非捕获方法引用,它将调用超类方法
  6. java 判断闰年和月份_java----根据输入的年月判断闰年和打印日历
  7. java并发数据共享机制_Java并发编程:核心理论之数据共享性
  8. mysql 包 过程 job_mysql job实例全过程
  9. JAVA第六章第6题,java第六章例题源代码
  10. 画出的点做交互_设计之下交互设计原型设计之概念设计