一.线程
线程是进程某程序段的一次运行。
1.线程共享资源,利用共享的资源,线程很容易能够互相通信
(1)进程代码段:每个线程有各自的寄存器组,在运行时期拷贝给cpu寄存器,来确定运行的是哪段代码段。
(2)公共数据:堆(指的全局堆,线程自身创建的堆独享),全局变量,静态变量,常量,
(3)打开文件描述符
(4)信号处理器,信号处理器是p_thread库提供的对信号处理的系统函数。
(5)进程id和进程组id
2.线程独享资源
(1)栈,自己申请的堆,
(2)信号屏蔽码:每个线程对不同信号的处理方式不同
(3)线程id
(4)错误返回码
(5)线程优先级:不同的优先级方便线程调度
(6)寄存器:每个线程有不同的寄存器以确定线程运行的信息
3.线程间通信
(1)锁机制:互斥锁,条件变量,读写锁
互斥锁以互斥方式防止数据结构被并发修改
条件变量以原子方式阻塞线程,直到某个特定条件为真为止,对条件的测试是在互斥锁的保护下进行
读写锁的读操作是可以同步的,写的方式是互斥的
(2)信号量机制
(3)信号机制
3.线程调度:这里
二.进程
进程的概念:进程是程序的一次运行
1.进程间通信方式:
(1)无名管道:半双工的通信方式,在具有亲缘关系的进程间使用。
(2)又名管道:半双工的通信方式,可以在非亲缘关系的进程间使用。
(3)信号量,是一种锁机制,对共享资源进行互斥访问时用到。
(4)消息队列:由消息的链表,存放在内核中的消息队列标识符表示,解决了管道只能传递字节流,信号量传输量小的问题
(5)共享内存,线程能创建和其他线程共享的一段内存
(6)套接字,优点是可用于不同机器间的通信
(7)信号:signal,用于通知某个事件已经发生
2.fork与vfork
fork和vfork都是用来创建子进程的函数,对资源的拷贝上不同
fork:复制资源是全部拷贝,以前的系统会讲资源在fork之后就全部拷贝,但新的拷贝思想是写时拷贝,即开始的时候父子进程的代码段,数据等资源只是虚拟地址不一样,实际上指的是同一个物理地址。当父子进程改变了相应段的内容时,父进程会将该段的复制给子进程。有一个细节问题就是父进程的优先级会低于子进程,这是因为子进程大部分都用于exec。如果父进程在子进程exec之前修改内容会导致不必要的写时复制。
vfork:父子进程共享数据段,但父进程会阻塞,直到子进程调用了exec或exit,一般来讲vfork创建的子进程用于启动一个新的进程。
三.文件
1.文件权限
文件权限一共有七条,分四组
第一组:文件类型 d,目录文件director
第二组:u,user,所有者权限,分三种分别是rwx,读,写,执行
第三组:r,other,其他人的权限,分三种同上
第四组:g,ground,用户组权限,分三种同上
改变文件方式:
chmod 751 a,给a文件的权限为 rwxr-x--x
chmod u=r,g = x,将user权限改为只读,ground改为只执行
chmod u+r,g-r,user权限加上读,用户组权限减去读
chmod a+r给所有用户加上读权限
2.目录查询的原理
先写个框架,以后再补