`
oolala
  • 浏览: 100390 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
09c341db-7f05-3f2b-a572-9ee69a5d8a77
unix环境高级编程
浏览量:21821
社区版块
存档分类
最新评论

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

 
阅读更多
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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics