Linux系统编程-进程-1 程序和进程、PCB、MMU、环境变量

程序和进程

程序

是指编译好的二进制文件,在磁盘上,不占用系统资源(CPU、内存、打开的文件、设备、锁、、、)

进程

是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行(程序运行起来,产生一个进程)

程序:剧本 (纸) 进程: 戏 (舞台、演员、灯光、道具)
同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程彼此之间互不影响
如:同时开两个终端。各自都有一个bash 但彼此 ID 不同。

并发

实质上,并发是宏观并行,微观串行!

时钟终端:强制让进程让出CPU资源的手段。

MMU内存管理单元

负责对虚拟内存地址和实际内存地址进行映射

修改内存访问级别问题

虚拟地址空间中,0~3GB是用户可以使用的大小,而3~4GB是内核空间,内核可以访问用户的空间,但用户访问不了内核的,但是实际内存中,并没有什么用户和内核的划分,所以需要有个东西来制定相应的访问权限的问题。

pcb进程控制块

PCB进程控制块:

        进程id

        文件描述符表

        进程状态:    初始态、就绪态、运行态、挂起态、终止态。

        进程工作目录位置

        *umask掩码 

        信号相关信息资源。

        用户id和组id

环境变量

环境变量,是指在操作系统中用来指定操作系统运行环境的一些参数。通常具有如下特征:

①字符串 (本质) ② 有统一的格式:名=值[:值] ③ 值用来描述进程环境信息。
存储形式:与命令行参数类似。 char *[] 数组,数组名 environ ,内部存储字符串 NULL作为哨兵结尾。
使用形式:与命令行参数类似。
加载位置:与命令行参数类似。位于用户区,高于stack 的起始位置。
引入环境变量表:须声明环境变量。extern char ** environ;

#include <stdio.h>

extern char **environ;

int main(void)
{
	int i;

	for(i = 0; environ[i] != NULL; i++){
		printf("%s\n", environ[i]);
	}

	return 0;
}

运行结果:

LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=10.16.73.40 1528 10.16.67.175 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=zh_CN.UTF-8
COLORTERM=truecolor
XDG_SESSION_ID=10
USER=chenxingzhi
PWD=/home/chenxingzhi/桌面/source-code/6/process_test/environ
HOME=/home/chenxingzhi
BROWSER=/home/chenxingzhi/.vscode-server/bin/695af097c7bd098fbf017ce3ac85e09bbc5dda06/bin/helpers/browser.sh
TERM_PROGRAM=vscode
SSH_CLIENT=10.16.73.40 1528 22
TERM_PROGRAM_VERSION=1.79.2
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
VSCODE_IPC_HOOK_CLI=/run/user/1000/vscode-ipc-d435bb8b-d3d2-4dac-86a8-c09c29a889bf.sock
MAIL=/var/mail/chenxingzhi
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=4
LANGUAGE=zh_CN:zh
LOGNAME=chenxingzhi
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000
PATH=/home/chenxingzhi/.vscode-server/bin/695af097c7bd098fbf017ce3ac85e09bbc5dda06/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LESSOPEN=| /usr/bin/lesspipe %s
_=./a.out
OLDPWD=/home/chenxingzhi/桌面/source-code/6/process_test

按照惯例,环境变量字符串都是name=value这样的形式,大多数name由大写字母加下划线组成,一般把那么的部分叫做环境变量,value的部分叫做环境变量的值。环境变量定义了进程的运行环境。

PATH

可执行文件的搜索路径。ls 命令也是一个程序,执行它不需要提供完整的路径名 /bin/ls,然而通常我们执行当前目录下的程序 a.out 却需要提供完整的路径名 ./a.out ,这是因为 PATH环境变量的值里面包含了 ls 命令所在的目录 /bin ,却不包含 a.out 所在的目录。 PATH 环境变量的值可以包含多个目录,用 号隔开。在 Shell 中用 echo 命令可以查看这个环境变量的值:
$ echo $PATH

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值