生产者和消费者问题 经典同步问题,生产者进程和消费者进程共享一块缓冲区,生产者向缓冲区写入数据,消费者消耗缓冲区的数据; 同步事项 生产者写入时消费者不能消耗 消费者消耗时生产者不能写入 生产者在缓冲区满时不能再写入 消费者在缓冲区空时不能再消耗 代码环境 : 基于C++ 11的线程库和并发库 VS2017 使用信号量empty(记录多少空位),条件变...
CPU Dispatch
CPU调度是多道程序操作系统的基础,对于支持线程的系统,是内核级线程被调度 CPU I/O区间周期 进程执行由CPU执行和I/O等待周期组成,进程在这两个状态间切换,直到CPU区间请求终止执行;I/O约束程序通常由许多短的CPU区间组成,CPU约束程序可能有少量长的CPU区间 CPU调度程序 每当CPU空闲时,操作系统必须从就绪队列选择一个进程来执行,进程选择由短期调度程序或CPU调...
process
进程 概念 进程是现代分时系统的工作单元,是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位 运行中的程序叫做进程,程序是被动的实体,程序本身并不是进程,进程不只是单纯的代码段,还包括堆栈段、数据段等 状态 三态 :就绪态,运行态,阻塞态 五态 :新的,运行,等待,就绪,终止 进程控制块(PCB) 进程在操作系统中用PCB表示,它包含许多与该进程相关的信息,如:进程...
OS Structure
操作系统的发展过程 单道批处理 系统将磁带上的第一个作业装入内存,并把运行控制权交给该作业,改作业单独装入内存并独占系统的资源,改作业完成后,返还运行控制权,系统再装入下一个作业;以此处理 缺点:每当运行中的作业发出I/O请求后,cpu便处于等待状态。系统资源得不到充分的利用 多道批处理 用户提交的作业首先存放在外村上形成一个队列,然后由作业调度程序按一定的算法选出若干作业装入内存...
Latch
引言 我们都知道CPU运行时计算的数据都是从内存中拿取的(准确的说是寄存器),那么内存的这些信息是如何保存的呢? 存储1位 我们先来看如何存储1位数据,也就是 1 和 0 我们知道计算机内的数据传输是以电信号的方式,也就是在电路上;通过设计各种逻辑电路可以得到不同的信号,我们就可以通过设计逻辑电路来永久存储 1 和 0 这是存储1的电路,无论A是什么输出一直都是1 这是存储0的电...
json in python
Json 是一种轻量级的数据交换格式 Json 模块提供了四个功能: dumps loads dump load dumps dumps:将 dict 转换成 str 1 2 3 4 5 data = {'1': 'a', '2': 'b'} str_data = json.dumps(data) print(type(str_data)) >>>...
IO in c++
IO in C++ 我们一直使用 cin 和 cout 来进行从控制台的输入输出,但实际上,c++语言并未定义任何输入输出语句,取而代之的是使用标准库里的stream(流)的机制来提供IO操作 how to understand stream “ 流 ”在C++中表示的是一个对象,也就是一个封装的类对象;cin和cout都是一个流类的对象 cin是istream的对象,是标准的输入 ...
python 2D array
最近在写python程序时遇到了一个问题,困扰了好几天 代码需要一个二维数组,python中的二维数组有两种声明方式,先讲第一种 1 2 3 4 5 6 7 dp = [[False]*3]*2 >>> [ [false,false,false], [false,false,false] ] 我们得到一个2行3列的数组,当我们改变某一个值的时候 1 ...
application layer
应用层概述 运输层为应用进程提供端到端的通信服务,但不同网络间的不同进程之间还需要不同的协议规则 应用层的许多协议都是基于客户-服务器模式,服务请求方是客户,响应方是服务器 域名系统DNS DNS是互联网使用的命名系统,将主机名转化为IP地址 当某一应用进程需要将主机名解析为IP地址时,就调用解析程序,成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP方式发送给本地域名...
transport layer
运输层是整个网络体系结构中的关键层次之一,起到承上启下的作用;运输层为应用层提供通信服务,属于面向通信部分的最高层,用户功能的最底层; 运输层概述 网络层提供的是主机到主机的逻辑通信,而运输层提供的是进程间端到端的逻辑通信 进程间的通信 首先我们要知道,从网络层来看,通信的两端是主机,但是实际上通信的端点是主机上的进程 然后因为一台上的主机有许多的进程,这些进程肯定是使用同一个运输层协议...