全部博文(6)
分类: C/C++
2011-12-13 20:52:13
基础概念:
进程与程序区别:进程是程序的一次动态执行过程.进程在内存中运行,程序在磁盘中存储.
线程:LWP
后三天进程的通信
BSD(高校):pipe、fifo、信号
System V:share memory、消息队列、信号灯(ftok)
BSD:Socket
Day1:进程的状态图:
运行态(正在运行和准备运行的)、等待(可中断等待、不可中断等待)、僵尸态、停止态
进程命令:ps –aux 、 top 、 kill (向特定PID发送信号)、 bg/fg 、nice/renice
创建进程:fork()、vfork()(子进程结束后父进程才开始运行)
创建子进程,(写时拷贝)拷贝数据段、代码 哪些不拷贝?(完整拷贝需要与线程区别)
退出方式exit(0)
介绍exec函数族,6个函数,函数参数:文件+路径
找到可执行文件,用它来取代原调用进程的数据段、代码、栈。
ls –l /home
execl(“/bin/ls”, “ls”, “-l”, “/home”, NULL);成功返回:无需判断,失败返回-1
wait/waitpid: waitpid(-1, NULL, 0) == wait(NULL)
Day2
守护进程:
Fork-àsetsit()----àchdir---àumask(0)-------àclose(fd)
一、线程:LWP
pthread_t a_thread;
1、 创建 pthread_create(&a_thread, NULL, thread_function, NULL)
2、 回收pthread_join(a_thread, &result) 调用线程一直阻塞到pthread_exit();
3、 结束当前线程pthread_exit();
4、 删除同一个进程当中的其他线程pthread_cancel(a_thread);
二、线程信号量
PV操作:一定需要初始化sem_init(&sem, 0, 0) :最后一个参数是初始值
P操作 sem_wait();
V操作 sem_post();
三、线程互斥(mutex)
pthread_mutex_t mutex;
初始化:pthread_mutex_init(&mutex, NULL);
加锁: pthread_mutex_lock(&mutex);
解锁: pthread_mutex_unlock(&mutex);
互斥和同步信号量的区别?
前者无法保证资源的访问顺序,后者可以,同步是在互斥的基础上保证用户访问顺序,尤其用在所有写入资源的情况下。
Day03通信:特点、用法
1、 无名管道pipe
只能用在有血缘关系的进程之间的通信、半双工(单方向的数据);
类似于文件IO的读写
int fd[2];
创建:pipe(fd);fd[0]读、fd[1]写
只有一个读端和只有一个写端时
2、 有名管道(FIFO)
类似队列、全双工(可读可写)
创建:mkfifo(path, mode)
打开:open(”myfifo”, “r”)
利用管道实现C/S模型
3、 信号
唯一的异步方式,软件层面对中断的一种模拟
Kill(pid, int signal)
Signal();
Pause();
Alarm();
常见信号:ctrl+Z SIGTSTP
ctrl+C SIGINT
ctrl+SIGQUIT
Day04IPC对象,都需要key来产生
查看ipcs 删除ipcrm
1、 共享内存
效率最高
shmget
shmat
shmdt
shmctl
2、 消息队列
消息类型
#define LEN sizeof(MSG)- sizeof(long))
msgget
msgctl
msgsnd
msgrcv
Day053、 信号灯集
semget
semctl
semop
} pipe: 具有亲缘关系的进程间,单工,数据在内存中
} fifo: 可用于任意进程间,双工,有文件名,数据在内存
} signal: 唯一的异步通信方式
} msg:常用于cs模式中, 按消息类型访问 ,可有优先级
} shm:效率最高(直接访问内存) ,需要同步、互斥机制
} sem:配合共享内存使用,用以实现同步和互斥