应用层续
DNS(域名解析系统)前面说的都是应用层的协议 和相关案例
应用层协议 和 例子都是所有案例中最多的。 域名解析系统是给其他应用应用的应用通过其他应用来为应用提供服务。
dns提供的是: 域名到 ip地址的转换
DNS的重要性(必要性)
IP地址标识主机、路由器
但IP地址不好记忆,不便人类使用(没有意义)
人类一般倾向于使用一些有意义的字符串来标识 Internet上的设备(大实话)
例如:qzheng@ustc.edu.cn 所在的邮件服务器 www.ustc.edu.cn 所在的web服务器
存在着“字符串”—– IP地址的转换的必要性
人类用户提供要访问机器的“字符串”名称
由DNS负责转换成为二进制的网络地址
DNS系统需要解决的问题主要解决的问题就是域名到ip地址的转换
问题1: 如何命名设备
需要通过一些有意义的字符串来标识设备。便于记忆
解决一个平面命名的重名问题:层次化 ...
应用层
目标: 网络应用的原理:网络应用协议的概念和 实现方面
传输层的服务模型
客户-服务器模式
对等模式(peer-to-peer)
内容分发网络
网络应用的实例:互 联网流行的应用层协 议
HTTP 、FTP 、SMTP / POP3 / IMAP 、DNS
编程: 网络应用程序
Socket API
传输层向应用层提供的原语 也是Socket API
创建一个新的网络应用
编程
在不同的端系统上运行
通过网络基础设施提供的服 务,应用进程彼此通信
如Web:
Web 服务器软件与浏览器软件 通信
网络核心中没有应用层软件
网络核心没有应用层功能
网络应用只在端系统上存在 ,快速网络应用开发和部署
应用层协议原理网络应用的体系结构
客户-服务器模式(C/S:client/server)
对等模式(P2P:Peer To Peer)
混合体:客户-服务器和对等体系结构
1. 客户-服务器(C/S)体系结构服务器:
一直运行
固定的IP地址和周知的端 口号(约定)
扩展性: ...
Eureka注册中心
远程调用的问题
服务消费者该如何获取服务提供者的地址信息?
如果有多个服务提供者,消费者该如何选择?
消费者如何得知服务提供者的健康状态?
Eureka的作用消费者该如何获取服务提供者具体信息?
提供者启动时向eureka注册自己的信息
eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息
如果有多个服务提供者,消费者该如何选择?
服务消费者利用负载均衡算法,从服务列表中挑选一个
消费者如何感知服务提供者健康状态?
服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
eureka会更新记录服务列表信息,心跳不正常会被剔除
消费者就可以拉取到最新的信息
在Eureka架构中,微服务角色有两类:
EurekaServer:服务端,注册中心
记录服务信息
心跳监控
EurekaClient:客户端Provider:服务提供者,例如案例中的 user-service
注册自己的信息到EurekaServer
每隔30秒向EurekaServer发送心跳
consumer:服务消费者,例如案例中的 order-servic ...
计算机网络概述
了解基本术语和概念。 掌握网络的基本原理。
什么是Internet ?从具体的构成角度节点
主机及其上面运行的应用程序(主机节点)
路由器、交换机等网络交换设备(中专节点、交换节点)
边: 通信的链路
接入网链路: 主机连接到互联网的链路
主干链路: 路由器间的链路
Internet(互联网)的组成
协议
协议控制发送、接收消息
如 TCP \ IP\HTTP\FTP等等
Internet: 网络的网络
Internet标准
RFC: 请求评述IETF : 互联网工程认证组织
从服务的角度
使用通信设施进行通信的分布式应用
Web、email、分布式游戏、电子商务、社交网络等
通信基础设施为 apps(分布式应用)提供给通信服务(编程接口)
为app提供服务 ,类似于邮政服务(面向连接 和 无连接); 将发送和接收数据的apps与互联网连接起来。
分布式应用是网络存在的理由
什么是协议?
协议定义了在两个或者两个通信实体之间交换的报文格式 和 次序, 以及在报文传输和 / 或接收或其他事件方面所采取的动作。
网络边缘在了解网络边缘 ...
初识微服务
单体架构与微服务架构的区别单体架构
将所有的业务功能都集中在一个项目中开发, 打包成一个包部署。
优点: 就是成本低, 架构简单
缺点: 耦合度极高
微服务架构
根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点: 降低服务的耦合; 有利于升级拓展项目
这样的微服务架构的问题一:业务越多 ,项目结构越复杂, 那么服务与服务之间的业务关系调用就会越来越复杂。
如此复杂的业务关系, 想要靠人来解决是不可能的, 所以微服务提供了一个组件—–注册中心
注册中心解决问题一注册中心可以记录微服务中 ,每个服务的IP、端口、及其他们的作用(能干什么)
如果一个服务想要调用另一个服务,那么想要知道该服务的作用, 就直接找到他的注册中心就可以得到对应的服务信息。
出现的问题二: 多个服务引起的很多配置文件的修改问题随着服务的增多, 配置信息也会海量的上升, 对于我们的管理是非常不利的。所以微服务提供了配置中心, 他可以管理这些服务中的所有配置
解决问题二 :配置中心解决。配置中心可以管理所有我们的配置文件。
如果以后需要有配置进行变更, 我们只需要通知配置中心即可 。它可 ...
文件系统
基本概念文件系统和文件文件系统: 一种用于持久性存储的系统抽象
在存储上: 组织,控制,导航,访问和检索数据
在大多数计算机系统包含文件系统
个人电脑,服务器,笔记本电脑
ipod,tivo,机顶盒,手机,电脑
google可能也是由一个文件系统构成的
文件: 文件系统中的一个单元的相关数据在操作系统中的抽象
文件系统的功能:
1. 分配文件磁盘空间
管理文件块(哪一块属于哪一个文件)
管理空闲空间(哪一块是空闲的)
分配算法(策略)
2**. 管理文件集合**
定位文件及其内容
命名: 通过名字找到文件的接口
最常见: 分层文件系统
文件系统类型(组织文件的不同方式)
3. 提供的便利及特征
保护: 分层来保护数据安全
可靠性,持久性: 保持文件的持久即使发生崩溃,媒体错误,攻击等
文件和块:
文件属性:名称,类型,位置,大小,保护,创建者,创建时间,最久修改时间…
文件头:
在存储元数据中保存了每个文件的信息,保存文件的属性,跟踪哪一块存储块属于逻辑上文件结构的哪个偏移
文件描述符
文件使用模式:
使用程序必须在使用前先”打开”文件 open(na ...
死锁和进程通信
死锁死锁问题一列系列阻塞的进程持有一种资源等待获取另一个阻塞的进程所占有的资源, 两个进程都因为没有获取到自己所需要的资源而不释放锁, 所以就会出现死锁问题。类似行车道:
死锁的系统化模型每个进程都使用
可重复使用的资源
一个时间内只能一个进程使用并且不能被释放删除
进程获取资源 ,后来释放由其他进程使用
处理器、IO通道、主和副存储器等等
如果每个进程拥有一个资源并请求其他资源, 死锁就有可能发生
资源分配图一组顶点V和边E的集合
V有两种类型 :
P={P1,P2,…,Pn},集合包括系统中的所有进程。
R={R1,R2,…,Rm},集合包括系统中的所有资源类型。
requesting,claiming edge - directed edge Pi → Rj
assignment,holding edge - directed edge Rj → Pi
死锁的特征死锁一定会出现的四个条件,但是出现这些特征不一定是死锁。
互斥: 在一个时间只能有一个进程使用资源
持有并等待: 进程保持至少一个资源正在等待获取其他进程持有的额外资源
无抢占: 一个 ...
信号量和管程
说实话, 这章没有完全看懂
信号量我们进入信号区可以如果是读操作, 那么就可以允许它几个信号同时进行, 如果是写操作 ,那么就设置只能是一个信号进行。
信号量的抽象数据类型
一个整形(sem),具有两个原子操作
P(): sem减一,如果sem<0,等待,否则继续
V(): sem加一,如果sem≤0,唤醒一个等待的P
P 和 V 都是两个科学家的名简称, 他们是提出这个概念的人。
信号量的使用信号量是整数
信号量是被保护的变量
初始化完成后,唯一改变一个信号量的值的办法是通过P()和V()
操作必须是原子
P()能够阻塞,V()不会阻塞
我们假定信号量是公平的
没有线程被阻塞在P()仍然堵塞如果V()被无限频繁调用(在同一个信号量)
在实践中,FIFO经常被使用
两个类型信号量
二进制信号量: 可以是0或1
计数信号量: 可以取任何非负数
两者相互表现(给定一个可以实现另一个)
信号量可以用在2个方面
互斥
条件同步(调度约束——一个线程等待另一个线程的事情发生)
用二进制信号量实现的互斥
用二进制信号量实现的调度约束
1234567891011 ...
同步
背景一~八章的内容到目前位置:
多道程序设计: 现代操作系统的重要特性
并行很有用(为什么?) 提示: 多个并发实体: CPU IO 用户 等
进程,线程: 操作系统抽象出来用于支持多道程序设计
CPU调度: 实现多道程序设计的机制
调度算法: 不同的策略
独立的线程
不和其他线程共享资源或状态
确定性==>: 输入状态决定结果
可重现==>: 能够重现起始条件, IO
调度顺序不重要
合作线程:
在多个线程中共享状态
不确定性
不可重现
不确定性和不可重现意味着bug可能是间歇性发生的进程,线程;计算机,设备需要合作
合作优点:
共享资源
一台电脑,多个用户
一个银行存款余额,多台ATM机
嵌入式系统
加速
IO操作和计算可以重叠
多处理器
模块化
将大程序分解成小程序 gcc会调用cpp,cc1,cc2,as,ld
使系统易于扩展
程序可以调用函数 fork() 来创建一个新的进程
操作系统需要分配一个新的并且唯一的进程ID
因此在内核中,这个系统调用会运行 new_pid = next_pid++ ...
进程调度
调度算法
背景cpu调度
从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
调度程序: 挑选进程/线程的内核函数(通过一些调度策略)
什么时候进行调度?
上下文切换
切换CPU的当前任务, 从一个进程/线程到另一个
保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态)
读取下一个进程/线程的上下文
调度的条件(满足一个即可)
一个进程从运行状态切换到等待状态
一个进程被终结
不可抢占
调度程序必须等待事件结束
可以抢占
调度程序在中断被相应后执行
当前的进程从运行切换到就绪, 或者一个进程从等待切换到就绪
当前运行的进程可以被换出
调度准则调度策略
人们通常都需要”更快”的服务什么是更快?
传输文件时的高带宽
玩游戏时的低延迟
这两个因素是独立的
和水管类比
低延迟: 喝水的时候想要一打开水龙头水就流出来
高带宽: 给游泳池充水时希望从水龙头里同时流出大量的水,并且不介意是否存在延迟
我们的目标:
减少响应时间: 及时处理用户的输出并且尽快将输出提供给用户
减少平 ...