UNIX环境高级编程-系统

系统组成

系统-->硬件:
系统-->软件:
软件-->应用程序:
软件-->操作系统:
操作系统-->内核:
操作系统-->系统软件:
操作系统-->硬件:
硬件-->CPU:
硬件-->内存:
硬件-->键盘:
硬件-->鼠标:
硬件-->硬盘:
硬件-->显卡:

操作系统

操作系统这个词语有二意性,有时指内核,有时指内核和系统工具软件的组合。

  • 由操作系统提供操作接口,支持用户通过该接口来操作系统,但是系统本身提供的功能,不足以完成用户需求时,则需要开发应用程序来拓展系统功能。
操作系统-->Linux:
操作系统-->Windows:
操作系统-->Hackintosh(OSX):
操作系统-->UNIX:

启动流程

st=>start: 上电
op2=>operation: 主板BIOS
op3=>operation: Boot
op4=>operation: Kernel
op5=>operation: Init
op6=>operation: Login
e=>end: Shell / Windows

st(right)->op2->op3(right)->op4->op5(right)->op6->e

关于文件

文件是一个重要的概念,一般定义为信息的集合。计算机做为信息处理的机器,文件是计算机处理的对象。

在Unix和Linux系统中,泛化了文件的概念,设备也被抽象成文件对象来进行操作,即: 一切皆文件

程序

只有当程序加载到内存后,才能运行.

错误处理

系统调用在一般情况下返回整数,并且通常用0表示成功,而小于0表示失败。当系统调用返回失败时,可以通过errno获得错误码,通过strerror获取错误解释,或者直接通过perror在标准错误文件中,输出错误信息。

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>

int main(int argc char *argv[]){
    int fd = open("someNotExist.file",O_RDWR);
    if(fd<0){
        perror("open");
        printf("errno is %d, errorstring is %s\n", errno, strerror(errno));
    }
}

信号

信号是进程通信的一种手段,某个进程收到信号,该信号可能来自内核、来自其它进程或者来自用户操作。例如:当用户按下ctrl+c时,其实是给前台进程发送了一个信号。

信号代码:

1) SIGHUP    2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

系统内核调用

User SpaceKernel Space是操作系统编程中常用的概念,即用户态和内核态。表示当前的代码在用户空间还是内核空间运行,对于不同的运行空间,CPU对内存的处理方式稍有不同。

系统调用指操作系统内核提供的功能,它提供了接口给用户空间代码调用。比如open/read/write/close等,都是属于Linux系统操作接口,而fopen/fread/fwrite/fclose是属于C标准提供的接口,在Linux下fopen其实底层调用了open