操作系统的PV操作
P操作作使信号量-1,尝试申请资源,发现为负说明没有申请到,阻塞自己到等待队列 V操作作使信号量+1,加完之后非正说明等待队列里有进程在等待,调用wakeup唤醒一个等待进程
首先先弄清楚pv操作的含义,pv操作是实现进程同步和互斥的常用方法,pv操作是低级通信原语,在执行期间不可分割,其中,p操作表示申请一个资源、v操作表示释放一个资源
p操作定义:s:=s-1,若s>=0,则执行p操作的进程继续执行;否则,若s<0,则设置该进程为阻塞状态,并将其插入阻塞队列。
v操作定义:s:=s-1,若s>0,则执行v操作的进程继续执行;否则,若s<=0,则从阻塞状态唤醒另一个进程,并将其插入就绪队列,执行v操作的进程继续执行。
java数据结构
ConcurrentHashMap 使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。 Arrays.asList() 返回 java.util.Arrays.ArrayList 对象,这里的 ArrayList 是 Arrays 私有的内部类
死锁
银行家算法解除死锁(×) 银行家算法是避免死锁的方法 采用“按序分配”策略可以破坏产生死锁的环路等待条件
产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则 就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件: 死锁的4个必要条件: (1)互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。 (2)请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。 (3)非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。 (4)循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的解除与预防:
1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。
为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。 3.仔细地对资源进行动态分配,以避免死锁。 4.通过破除死锁四个必要条件之一,来防止死锁产生。
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要给予合理的规划。
解决死锁问题的策略: 1、条件一:互斥条件
条件一念一否定的,因为资源的互斥性是由其自身的性质决定的。但是可以采用虚拟设备技术排 除非共享设备死锁的可能。
2、条件二:不剥夺条件
很难实现。系统一般让资源占有者自己主动释放资源,而不是采用抢占的方式。
3、条件三:占有并等待
在资源分配策略上可以采取静态的一次性资源分配的方法来保证死锁不可能发生,这是一种很保守 的静态预防死锁的方法,但是资源利用率低下。
4、条件四:环路条件
在进行资源分配前检查是否会出现环路,预测是否可能发生死锁,只要有这种可能就不予以分配。 即采用动态分配资源的方法。
总结来看解决死锁的策略有以下几个: 1、采用资源静态分配方法预防死锁。 2、采用资源动态分配、有效的控制分配方法来避免死锁。 3、当死锁发生时检测出死锁,并设法修复。
数据库关系范式
1NF 2NF 3NF BCNF 下面这个链接讲的很全: https://blog.csdn.net/u014458048/article/details/56678698
计算机网络协议
在Internet中TCP/IP协议是使用最为广泛的通讯协议。
1.1 应用层
应用层是网络应用程序以及它们的应用层协议存留的地方。因特网应用层包括许多协议,例如HTTP(Web应用的主要协议)、SMTP(邮件传输)和FTP(文件传送)等。再比如我们每天都在使用的DNS域名系统。
应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另外一个端系统中的应用程序交换信息的分组。 我们把位于应用层的信息分组称为报文。
DNS和HTTP属于应用层。
位于计算机网络体系结构的最上层,前面四层做的所有事情就是为了他服务,他也是设计和建立计算机网络的最终目的,通俗的讲,就是我们开发的应用软件,就处于这一层,
比如,QQ,浏览器访问网页,等等你看得到的应用软件都是在这一层,但是这些软件在运行的过程中,也需要依靠一些特定的协议才能完成相应的功能,
比如浏览器通过网址访问网页,其中是如何做到的,这就是我们所要学习的东西。
应用层中的应用软件分两种:客户/服务器和P2P体系结构
1)客户/服务器(client/server)
这种类型,就是我们很熟悉的客户端,服务器模型,客户端请求服务器,服务器响应客户端这样的一种方式进行“交流”
2)P2P
也称为对等体系结构。P2P相当于每个人的电脑度可以当服务器,也可以当客户端,不单单限制于只能客户端访问服务器,
你自己的计算机可以去访问别人的计算机上的内容,别的同样可以访问你计算机上的内容,这样达到一种共享的状态。
1.2 传输层
因特网的传输层在应用程序端点之间传送应用层报文。在因特网中,有TCP和UDP两个传输层协议。
TCP向它的应用程序提供了面向连接的服务,这种服务包括了应用层报文向目的地的确保传递和流量控制。TCP也将长报文划分成短报文,并提供拥塞控制机制,因此,当网络拥塞时,发送方可以抑制其传输速率。
UDP协议向它的应用程序提供无连接服务。这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制。
我们把传输层分组称为报文段。
1.3 网络层
因特网的网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机。在一台源主机中的因特网传输层协议(TCP或者UDP)向网络层递交传输层报文段和目的地址。
网络层包括著名的IP协议,该协议定义了在数据报中的各个字段以及端系统和路由器如果作用于这些字段。网络层也包括决定路由的路由选择协议,它使得数据报根据该路由从源传输到目的地。
1.4 链路层
网络层通过源和目的地之间的一系列路由器路由数据报,为了将分组从一个结点移动到路径的下一个结点,网络层必须依靠链路层的服务。特别是在每个结点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个结点,在下一个结点,链路层将数据报上传给网络层。
由链路层提供的服务取决于应用于该链路的特定的链路层协议,比如我们常见的以太网,WIFI等。
因为数据报从源到目的地传送通常要经过几条链路,一个数据报可能被沿途不同链路上的不同链路层协议处理。例如,一个数据报可能被一段链路上的以太网和下一段链路上的PPP所处理。网络层将受到来自每个不同链路的链路层协议的服务。
我们把链路层分组称为帧。
1.5 物理层
链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的一个一个比特从一个结点移动到下一个结点。物理层的协议是和链路相关的,并且进一步与该链路的实际传输媒体相关。比如,以太网具有许多物理层协议:一个是关于双绞铜线的,另一个是关于同轴电缆的,还有是关于光纤的等等。
linux命令
守护进程 crond 为 crontab 命令提供服务。 1、查看 crond 服务是否安装(守护进程 crond 为 crontab 命令提供服务) 每5分钟运行一次crond任务exam:
*/5 * * * * exam
|