代码之家  ›  专栏  ›  技术社区  ›  Goktug

操作系统中的进程

  •  1
  • Goktug  · 技术社区  · 7 年前

    当我读到一篇关于操作系统中的进程和线程的资料时,我面对着这句话,我觉得这听起来很奇怪:

    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 回复  |  直到 7 年前
        1
  •  1
  •   Saiph    7 年前

    进程必须存储在内存中:

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

    除了非常琐碎的, 程序将使用所有这些段 . 看看 wikipedia's explanation of what the segments contain .

    我认为在这句话中,作者不想深入讨论细节,而是将堆栈/堆/数据/BSS作为程序的数据,而不是实际的数据段。

        2
  •  0
  •   user3344003    7 年前

    这句话不正确。

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

    在执行程序之前,必须存在一个进程。在许多非宦官的系统上,一个进程运行多个程序。s

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

    链接器删除程序段。加载程序按照链接器的指令创建地址空间。

    “bss、数据、堆和代码”是设想地址空间的一种不好的方式。

    有:

    1. 可执行数据
    2. 只读数据
    3. 读/写数据,可以
      • 已初始化
      • 未初始化

    堆和堆栈只是读/写数据。操作系统甚至无法区分哪些数据是堆栈,哪些是堆。都是记忆。