指向内核为每一个进程维护的该进程打开文件记录表,当程序打开一个现有文件或者创建新文件时,内核向进程返回文件描述符
进程
线程
posix线程以及windows 线程,unix系统都是posix 线程即pthread. windows 线程即为微软开发的线程。
新建状态 就绪状态 运行状态 阻塞状态 死亡状态
yield()暂时交出 cpu 控制权,从 running 状态转为 runnalbe 状态,但是仍有 可能被调度,sleep()线程指定休眠一段时间,wait()在其他线程调用此对 象的 notify()或 notifyAll()方法时才能继续执行 线程中 sleep()方法和 yeild()方法的主要区别:
多核cpu可以每个核来运行一个线程,同时运行多个线程
1.计算机某一时刻最多有一个进程 一个进程可以包含多个线程 2.同一个进程中的线程共享内存空间
3.一个线程使用内存时, 其他线程不能进去抢占 信号量, 互斥锁, 互斥锁是信号量的低级版本 只能0,1
用于互斥时,信号量的值应该初始化为1,任何时候只能由单个进程或者线程拥有
用P V来操作,P代表值减小,V代表值增加
当信号量大于0时,代表资源可以使用, 进程调用资源,信号量减少 当信号量为0时,必须等待其他进程释放信号量
并发的执行单元对共享资源的访问导致竞态
两个进程试图向同一个设备的相同位置写入数据
操作系统保存正在运行的进程状态,恢复进程的状态
保存的内容: 寄存器的值和内存分配的情况
4.进程是会死锁的
使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。
子进程与父进程的区别在于:
1、父进程设置的锁,子进程不继承(因为如果是排它锁,被继承的话,矛盾了)
2、各自的进程ID和父进程ID不同
3、子进程的未决告警被清除;
4、子进程的未决信号集设置为空集。 -mickole博客
两个执行单元互相持有对方的资源,同时互相等待对方的资源而产生的阻塞
解决死锁的办法:
有哪些方法处理队列中的线程,
关于死锁的问题。哪些情况下会产生死锁
当两个执行单元互相持有对方的资源,同时等待对方的资源产生的阻塞
如何让两个进程产生死锁
并发
FCFS first come first server
RR Round robin(知更鸟) 轮询法 每个进程都可以得到一个最短的cpu使用时间,维护一个进程队列
SJF 最短作业优先算法
多级队列: 多个调度算法一起使用
通过画甘特图来计算时间
实现并发
用一个缓冲队列来记录:
提前生产好若干个资源,然后调用出资源,生产后进入资源
数据传输:一个进程将他的数据发送给另一个进程
共享数据
资源共享
进程控制
三种
普通管道
流管道
命名管道
系统IPC
信号量:信号量是一个计数器,可以控制多个进程对资源的访问
消息队列: 消息队列是由消息的链表
socket
共享内存:共享内存是映射一段能被其他进程访问的n内存,由一个进程创建,多个进程共享
防止物理内存不够用,将硬盘的一部分作为虚拟
将程序分为若干个 较小的段和页,用映像表来表示是否装入了内存。
优点
缺点:
首先分配:找到第一个可用空间,然后分配 最佳分配:先扫描全局可用区域表,然后找一个可用区进行分配
将主存空间和程序空间分为固定大小的页,按照页顺序编号
虚拟地址中为虚页,主存地址中为实页
每个用户有一个在cpu中的基址寄存器,可以根据用户号在 找到与用户程序相对应的基址寄存器
从基址寄存器中读取到页表的起始地址,访问页表地址,将得到的主存页号和页内偏移加起来的到主存实地址
linux文件权限: 第一段:文件类型 第二段:文件所有者的权限 第三段:文件在组成员的,读写执行权限 第四段:其他用户的读写执行权限
du-sh 查看文件夹的大小 cd ls grep 与管道命令进行 结合 进行内容的筛选 find 命令 cp copy mv 命令 rm -rf 递归删除 ps 命令 kill file filename 找到文件名 tar 打包压缩 cat 查看文件内容 chmod 改变文件权限 vim gcc time