一、基础知识
1、linux操作系统,熟悉常用的指令。
2、vim编译器的使用,Makefile的编写。
3、用户以及权限方面相关的知识。
4、linux下环境变量的概念。
二、进程概念相关
1、进程的概念,了解PCB的概念,以及task_struct结构体。
2、进程的创建,fork()与vfork()的区别和联系。
3、进程的等待,waitpid()与wait(),阻塞等待与非阻塞等待。
4、进程的程序替换,execl(),execlp(),execle(),execv(),execvp(),execvlp()。
5、进程的终止,退出码的概念,低八位(异常信号量),次低八位(正常退出码)
三、进程间通信(symtem-V)
1、内核缓冲区与用户缓冲区的概念。
2、文件描述符与文件指针的概念。
3、命名管道与匿名管道(实现父子进程匿名管道的通信和两个进程间命名管道通信)
匿名管道(pipe)的特点(以文件流的模式,生命周期和进程相关联,只能支持有血缘关系的进程间单向通信),命名管道(环形buff)(fifo,mkfifo,mkmod)的特点(可以使不同进程间进行通信)。
4、消息队列(实现两个进程client和server的相互发消息)
msgget(),ftok(),msgctl(),msgrcv(),msgsnd(),消息队列的特点(基于消息面向数据包的通信方式,生命周期和内核关联,双向通信)。
5、信号量(实现一个父子进程的通信)
首先了解临界资源和临界区的概念,信号量是原子操作下实现的,system-v版本下的信号量没有传输数据只用于控制,senbuf结构体,semun联合,
semset(),semctl(),semop()的操作。
6、共享内存(实现两个进程client和server的相互发消息)
特点(最高效的通信方式,需要自己维护同步与互斥)。shmget(),shmctl(),shmat(),shmdt()。
四、线程的概念(posix标准)
1、线程与进程的区别与联系。
2、线程的创建,pthread_create()。
线程的等待,pthread_join()阻塞方式等待。
线程的返回,线程内部return,使用pthread_exit()退出某个线程,使用 pthread_cancel()取消某个线程。
线程的分离,pthread_decth() 分离后的线程会自己管理自己的资源进程,不用 阻塞式等待。
3、线程的同步与互斥
1>互斥量:线程的互斥。
pthread_mutex_lock(),pthread_mutex_unlock(),pthread_mutex_destory()
2>生产者消费者模型,死锁的概念,死锁产生的4个必要条件,使用条件变量和
互斥量实现一个生产者消费者模型。
3>posix版本信号量sem,单位为信号量区别于system_v版本下信号量集。 sem_init(),sem_wait(),sem_post()(环形数组buff下实现多生产者多消费者 模型)。
4>读写锁,读写优先的问题。
五、linux信号
1、kill-l普通信号1-31,实时信号34-64。
2、信号的产生方式,键盘,软硬件,kill(),alarm(),abort(),raise()等。
3、信号的处理方式,忽略,执行默认动作,执行自定义动作。
4、信号未决和信号递达。task_struct中pending,block,handler表。
5、信号集sigset_t,信号处理函数 sigemptyset(),sigaddset(),sigpromask(),
sigpending()。(屏蔽2号信号输出当前pending集,解除屏)
6、信号的捕捉,signal(),sigaction()。(模拟sleep)
7、信号的处理流程,用户态与内核态切换的场景。
六、作业控制与守护进程
1、进程组,shell下的作业控制,会话的概念。
2、控制终端(tty,pts,pty),init下的7个启动模式,用户登录的流程,作业控制,fg命令,bg%命令。
3、守护进程的概念,crond系统进程的编写,setsid(),守护进程的创建。
阅读书籍,深入理解计算机系统,unix高级环境编程