操作系统中的过程

时间:2018-03-01 19:25:49

标签: process operating-system

当我阅读有关操作系统中的进程和线程的来源时,我遇到了这句话,这对我来说听起来很奇怪:

When a program is executed and handled by the processor, it converts into a process. A process needs to use the data and code segment in the memory.

我认为第一句自然是真的。但是,我无法理解为什么这个过程只需要使用数据和代码段?

#include <stdio.h>
x = 10;
y;

int main(void){

   int *array = (int*)malloc(sizeof(int) * 4);
   printf("x and y are %d %d", x, y);

   return 0;
}

我认为在执行此代码时,生成的进程使用bss,数据,堆和代码段。在我看来,一个过程可以从内存的任何部分中受益。

如果我的想法错了,有人可以解释原因吗?

2 个答案:

答案 0 :(得分:1)

进程必须存储在内存中:

  • 代码。
  • 堆。
  • 栈。
  • 数据。
  • BSS。

除了非常微不足道的,程序将使用所有这些细分。看看wikipedia's explanation of what the segments contain

我认为在句子中,作者并不想详细说明并将堆栈/堆/数据/ BSS称为程序的数据,而不是实际的数据段。

答案 1 :(得分:0)

此声明不正确。

  

当程序由处理器执行和处理时,它将转换为进程。进程需要使用内存中的数据和代码段。

在执行程序之前必须存在进程。在许多非太监系统中,单个过程运行多个程序。

  

我认为在执行此代码时,生成的进程使用bss,数据,堆和代码段。在我看来,一个过程可以从内存的任何部分中受益。

LINKER deine计划细分。加载器遵循链接器的指令来创建地址空间。

&#34; bss,数据,堆和代码&#34;设想地址空间是一种糟糕的方式。

有:

  1. 可执行数据
  2. 只读数据
  3. 可以读取/写入数据
    • 初始化
    • 未初始化
  4. 堆和堆栈只是读/写数据。操作系统甚至无法判断哪些数据是堆栈,哪些是堆。这只是记忆。