欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unix系统编程笔记:2、程序、进程、线程

程序员文章站 2022-05-07 17:52:38
...
1、程序怎么转换成进程
    程序(program)是为了完成特定的任务而准备好的一个指令序列。
 
        c编译器将每个源文件翻译成一个目标文件,然后编译器将这些单个的目标文件同必须的一些库相链接,形成一个可执行模块(executable module),
    程序运行或执行时,操作系统将可执行模块拷贝到主存储器的程序映象(program image)中去。
 
    进程(process)是一个正在执行的程序实例。每个实例都有自己的地址空间和执行状态。
    每个实例都有自己的地址空间和执行状态。
    当操作系统向内核数据结构中添加了适当的信息,并为运行程序代码分配了必要的资源之后,程序就变成了进程。
 
2、线程和执行线程
    程序执行时,由进程程序计数器的值来决定下面该执行哪一条进程指令。得到的指令流被称为执行线程(thread of execution)
 
    线程是代表了进程内执行线程的一种抽象数据类型,线程有自己的执行栈、程序计数器值、寄存器组和状态。
    
3、程序映像的布局
    加载之后,可执行程序看起来占据了一个连续的内存体,这个连续的内存块被称为程序映像
 
4、库函数调用
    必须要处理所有的错误,而不仅仅是那些必须检测的错误
    
    perror输出一个对应error当前值的错误消息
    #include <stdio.h>
    void perror(const char *s);
 
5、函数返回值和错误
    错误处理是编写可靠系统程序中的一个关键问题。
    
    处理unix程序中的错误的标准方法有:
    a)打印出错消息并退出程序
    b)返回-1或NULL,并设置errno这样的错误指示符
    c)返回错误码
 
6、参数数组
    参数数组(argment array)是一个指向字符串的指针数组
    mine -c 10 2.0
    argv[0] = mine
    argv[1] = -c
    argv[2] = 10
    argv[3] = 2.0
    argv[4] = NULL