栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux 4:进程,主函数参数,计算机组成,内存管理,fork复制进程

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux 4:进程,主函数参数,计算机组成,内存管理,fork复制进程

文章目录
  • 1. 进程
    • 1.1 进程概念
    • 1.2 进程特点
    • 1.3 进程状态
    • 1.4 printf 函数输出问题
  • 2. 主函数参数
    • 2.1 打印参数个数和参数内容
    • 2.2 打印环境变量
  • 3. 计算机基本组成
    • 3.1 计算机组成五大部件
    • 3.2 系统总线
    • 3.3 指令
    • 3.4 操作系统
      • 3.4.1 内存管理
  • 4. 复制进程 fork
    • 4.1 fork进程
    • 4.2 如何区分父子进程?
      • 4.2.1 代码示例1
      • 4.2.2 代码示例2
      • 4.2.3 代码示例3
      • 4.2.4 代码示例4


1. 进程 1.1 进程概念

一个正在执行的程序

  • PCB:进程控制块,是进程存在的唯一标志,用来描述的进程的属性信息。
  • 操作系统:用来管理进程
  • 进程状态:就绪,执行,阻塞
  • 并行和并发:并行是一种特殊的并发
  • 简单分页:物理内存

1.2 进程特点

结构体:struct task_struct(此结构体用来描述进程的属性)

struct task_struct
{
	int pid;//唯一标识进程
	int status;//表示进程状态(就绪,运行,阻塞)
};
  • Pid(整数值)成员,进程的唯一标识符,当前进行Id 子进程
  • Ppid 父进程id
  • Kill+进程序号:结束一个进程
  • Kill -9 进程序号:可以强制结束一个进程
/usr/include存放头文件
/bin命令
/lib库文件

1.3 进程状态

就绪、运行、阻塞

1.4 printf 函数输出问题

printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有一下三种情况满足,才会输出到屏幕。

  • 1) 缓冲区满
  • 2) 强制刷新缓冲区 fflush
  • 3) 程序结束时

程序睡眠3秒钟后打印hello,因为缓冲区为了减少系统开销,会在进程结束之前才进行刷新打印

  1 #include
  2 #include
  3 #include
  4 int main()
  5 {
  6     printf("hello");
  7     sleep(3);
  8     exit(0);
  9 }

Linux缓冲区打印数据

调用_exit(0)系统直接退出,不会打印数据,因为缓冲区未被刷新,直接结束程序

2. 主函数参数 2.1 打印参数个数和参数内容
  1 #include
  2 #include
  3 #include
  4 int main(int argc,char*argv[],char*envp[])
  5 {
  6     int i=0;
  7     printf("argc=%dn",argc);
  8 
  9     for(;i
 11         printf("argv[%d]=%sn",i,argv[i]);
 12     }
 13     exit(0);
 14 }


2.2 打印环境变量

代码

  1 #include
  2 #include
  3 #include
  4 int main(int argc,char*argv[],char*envp[])
  5 {
  6     int i=0;
  7     printf("argc=%dn",argc);
  8 
  9     for(;i
 11         printf("argv[%d]=%sn",i,argv[i]);
 12     }
 13 
 14     for(i=0;envp[i]!=NULL;i++)
 15     {
 16         printf("envp[%d]=%sn",i,envp[i]);
 17     }
 18     exit(0);
 19 }

运行结果

3. 计算机基本组成 3.1 计算机组成五大部件
  • (1) 运算器 :也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻
    辑运算,移位,比较等。
  • (2) 控制器 :它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证
    计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。
  • (3) 存储器 :存储程序和各种数据。
  • (4) 输入设备 :把人所熟悉的信息如,图片,声音,文字,转换为计算机能够识别的信
    息存储起来。
  • (5) 输出设备 : 把计算机机能识别的信息转换为人能识别的信息,进行呈现。

一台计算机可以抽象成下图: CPU 中包含控制器和运算器, 内存就是存储器。I/O 设
备就是输入设备和输出设备,如:键盘、显示器、鼠标、硬盘、网卡。

3.2 系统总线

(1) 数据总线 :用来在各个功能部件中间传输数据,是双向传输总线。
(2) 地址总线 : 用来指出数据总线上的源数据或目的数据在主存单元的地址或 io 设备的地址。
(3) 控制总线 :由于各个连接在数据总线和地址总线的部件都是共享这两类总线的,那么在某一时刻由谁来使用,就是控制总线负责完成的。

.c和.exe文件都在I/O设备中存储,当程序开始执行时候,才会在内存中(内存一旦掉电,就会失去数据)

3.3 指令
  • (1) 指令 :是指示计算机执行某种操作的命令。一条指令通常由两部分构成:地址码 和操作码。
  • (2) 程序 : 由一条一条的指令构成。
  • (3) 指令周期 :cpu 每取出并执行一条指令所需的全部时间称为指令周期。
  • (4) 指令系统 :计算机能够执行的全部指令的集合称为该计算机的指令系统。
  • (5) RISC :精简指令系统计算机。
  • (6) CISC :复杂指令系统计算机。
  • (7) 程序与指令:高级语言 汇编助记符 机器指令
3.4 操作系统

操作系统:管理计算机上的软硬件资源,为用户提供一个交互的接口

  • (1) 串行处理
  • (2) 批处理
  • (3) 多道程序设计
  • (4) 分时系统
3.4.1 内存管理

为了方便管理内存,操作系统把内存分为物理页面(通常大小为4k或者8k)

简单分页 逻辑页 物理页 页表

页表可以将逻辑地址转换为物理地址


内存结构

4. 复制进程 fork 4.1 fork进程

执行fork后子进程进行复制,从fork位置继续进行复制

4.2 如何区分父子进程?

父进程的fork的返回值是子进程的pid号,子进程的返回值为0

4.2.1 代码示例1

fork复制代码示例

运行结果

  • 两个进程同时执行结果

  • 每次运行结果有可能不一样,因为每次逻辑地址和物理地址不一样

4.2.2 代码示例2

代码示例

运行结果:6个A

4.2.3 代码示例3

代码示例

运行结果:8个A

4.2.4 代码示例4

代码示例

运行结果:3个A

  • Fork复制进程作用:多个进程共同完成,复制出来的子进程被替换,两次程序运行结果可以不同

  • Fork返回两次,分别在父子进程中返回

  • Fork命令解释器:bash

  • 父进程的地址和子进程地址数值相同,不在同一块内存空间,不是真实物理地址,而是逻辑地址,逻辑地址相同。

  • 父进程可以处理子进程,父进程不能先于子进程结束,如果子进程先于父进程结束,父进程没有获取子进程的退出码,子进程先结束有可能会变为僵死进程。(父进程结束后,被1号进程接收)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号