计算机网络、计算机操作系统这两个“兄弟”是所有开发岗位都需要“结拜”的,不管你是 Java、C++还是测试。对于后端开发的童鞋来说,计算机网络的重要性不亚于语言基础,毕竟平时开发经常会和网络打交道,比如:抓个包等等。所以对这一块知识点的准备还是要抱着敬畏之心,不要放过任何一个漏网之题。下面来看看华为工程师分享的计算机网络与操作系统吧:
注:本章内容较长,请大家耐心看到最后。绝对有收获,文末后这两份《计算机操作系统》与《计算机网络协议》PDF的获取方式,如果这篇文章对大家有帮助的话,也别忘记了,一键三连哦,你的支持就是我最大的创作鼓励。
操作系统
现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。
计算机硬件简介
操作系统与运行操作系统的内核硬件关系密切。操作系统扩展了计算机指令集并管理计算机的资源。因此,操作系统因此必须足够了解硬件的运行,这里我们先简要介绍一下现代计算机中的计算机硬件。
进程.
操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象。操作系统的其他所有内容都是围绕着进程展开的。进程是操作系统提供的最古老也是最重要的概念之一。即使可以使用的CPU只有一个,它们也支持(伪) 并发操作。它们会将一个单独的CPU抽象为多个虚拟机的CPU。可以说:没有进程的抽象,现代操作系统将不复存在。
进程模型
在进程模型中,所有计算机上运行的软件,通常也包括操作系统,被组织为若干顺序进程简称为进程。 一个进程就是一个正在执行的程序的实例,进程也包括程序计数器、寄存器和变量的当前值。从概念上来说,每个进程都有各自的虚拟CPU,但是实际情况是CPU会在各个进程之间进行来回切换。
线程
在传统的操作系统中,每个进程都有一个地址空间和一个控制线程。事实上,这是大部分进程的定义。不过,在许多情况下,经常存在同一地址空间中运行多个控制线程的情形,这些线程就像是分离得进程。下面我们就着重探讨一下什么是线程
多线程解决方案
调度
当一个计算机是多道程序设计系统时,会频繁的有很多进程或者线程来同时竞争CPU时间片。当两个或两个以上的进程/线程处于就绪状态时,就会发生这种情况。如果只有一个CPU可用,那么必须选择接下来哪个进程/线程可以运行。操作系统中有一个叫做调度程序的角色存在,它就是做这件事儿的,该程序使用的算法叫做调度算法
尽管有一些不同,但许多适用于进程调度的处理方法同样也适用于线程调度。当内核管理线程的时候,调度通常会以线程级别发生,很少或者根本不会考虑线程属于哪个进程。下面我们会 首先专注于进程和线程的调度问题,然后会明确的介绍线程调度以及它产生的问题。
调度算法的目标
为了设计调度算法,有必要考虑一下什么是好的调度算法。有一些目标取决于环境(批处理、 交互式或者实时)但大部分是适用于所有情况的,下面是一些需要考量的因素,我们会在下面一起讨论。
一种存储器抽象:地址空间
把物理内存暴露给进程会有几个主要的缺点:第-个问题是,如果用户程序可以寻址内存的每个字节,它们就可以很容易的破坏操作系统,从而使系统停止运行(除非使用 IBM 360那种lock-and-key模式或者特殊的硬件进行保护)。即使在只有一个用户进程运行的情况下,这个问题也存在。第二点是,这种模型想要运行多个程序是很困难的(如果只有一个CPU那就是顺序执行)。在个人计算机上,一般会打开很多应用程序,比如输入法、电子邮件、浏览器,这些进程在不同时刻会有一个进程正在运行,其他应用程序可以通过鼠标来唤醒。在系统中没有物理内存的情况下很难实现。
页表
软件TLB管理
直到现在,我们假设每台电脑都有可以被硬件识别的页表,外加一个TLB。在这个设计中,TLB管理和处理TLB错误完全由硬件来完成。仅仅当页面不在内存中时,才会发生操作系统的陷入。
在以前,我们上面的假设通常是正确的。但是,许多现代的RISC 机器,包括SPARC、MIPS 和HPPA,几乎所有的页面管理都是在软件中完成的。
文件命名
文件是一种抽象机制,它提供了-种方式用来存储信息以及在后面进行读取。可能任何- -种机制最重要的特性就是管理对象的命名方式。在创建一个文件后, 它会给文件一个命名。 当进程终止时,文件会继续存在,并且其他进程可以使用名称访问该文件。
文件命名规则对于不同的操作系统来说是不一样的,但是所有现代操作系统都允许使用1 - 8个字母的字符串作为合法文件名。
某些文件区分大小写字母,而大多数则不区分。UNIX 属于第一类;历史悠久的MS-DOS 属于第二类(顺便说一句,尽管MS-DOS历史悠久,但MS-DOS仍在嵌入式系统中非常广泛地使用,因此它绝不是过时的) ;因此,UNIX 系统会有三种不同的命名文件: maria 、Maria 、MARIA 。 在MS-DOS,所有这些命名都属于相同的文件。
文件类型
很多操作系统支持多种文件类型。例如,UNIX (同样包括OS X)和Windows都具有常规的文件和目录。除此之外,UNIX 还具有字符特殊文件 和块特殊文件。常规文件是包含有用户信息的文件。用户一般使用的文件大都是常规文件,常规文件一般包括可执行文件、文本文件、图像文件,从常规文件读取数据或将数据写入时,内核会根据文件系统的规则执行操作,是写入可能被延迟,记录日志或者接受其他操作。
字符特殊文件和输入/输出有关,用于串行I/O类设备,如终端、打印机、网络等。块特殊文件用于磁盘类设备。我们主要讨论的是常规文件。
目录
文件系统通常提供目录或者文件夹用于记录文件的位置, 在很多系统中目录本身也是文件,下面我们会讨论关于文件,他们的组织形式、属性和可以对文件进行的操作。
一级目录系统
目录系统最简单的形式是有一个能够包含所有文件的目录。这种目录被称为根目录,由于根目录的唯一性,所以其名称并不重要。在最早期的个人计算机中,这种系统很常见,部分原因是因为只有一个用户。下面是一个单层目录系统的例子
文件系统布局
文件的实现
链表分配
中断处理程序
错误处理
磁盘在制造的过程中可能会有瑕疵,如果瑕疵比较小,比如只有几位,那么使用坏扇区并且每次只是让ECC纠正错误是可行的,如果瑕疵较大,那么错误就不可能被掩盖。
一般坏块有两种处理办法,一种是在控制器中进行处理; 一种是在操作系统层面进行处理。
这两种方法经常替换使用,比如一个具有30个数据扇区和两个备用扇区的磁盘,其中扇区4是有瑕疵的。
资源
大部分的死锁都和资源有关,在进程对设备、文件具有独占性(排他性)时会产生死锁。我们把这类需要排他性使用的对象称为资源。资源主要分为可抢占资源和不可抢占资源
可抢占资源和不可抢占资源
死锁检测和恢复
第二种技术是死锁的检测和恢复。这种解决方式不会尝试去阻止死锁的出现。相反,这种解决方案会希望死锁尽可能的出现,在监测到死锁出现后,对其进行恢复。下面我们就来探讨一下死锁的检测和恢复的几种方式
破坏死锁
注:笔记文档知识点过多,若要全部展示出来比较困难,以下以部分截图的方式展示给大家作为参考学习,大家一键三连之后【见下图即可获取】这两份文档,有需要的朋友可以自取
HTTP基本概念
HTTP与HTTPS
IP基本认识
IP在TCP/IP参考模型中处于第三层,也就是网络层。
网络层的主要作用是:实现主机与主机之间的通信,也叫点对点通信。
TCP基本认识
我们先来看看TCP头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。
TCP三次握手过程和状态变迁
TCP是面向连接的协议,所以使用TCP前必须先建立连接,而建立连接是通过三次握手来进行的。
TCP四次挥手过程和状态变迁
天下没有不散的宴席,对于TCP连接也是这样,TCP 断开连接是通过四次挥手方式。
双方都可以主动断开连接,断开连接后主机中的「资源」将被释放。
针对TCP应该如何Socket编程?
超时重传
重传机制的其中一个方式,就是在发送数据时,设定一个定时器, 当超过指定的时间后,没有收到对方的ACK 」确认应答报文,就会重发该数据,也就是我们常说的超时重传。
流量控制
解密TCP三次握手和四次挥手
既然学会了tcpdump和Wireshark两大网络分析利器,那我们快马加鞭,接下用它俩抓取和分析HTTP协议网络包,并理解TCP三次握手和四次挥手的工作原理。
TCP快速建立连接
客户端在向服务端发起HTTP GET请求时,一个完整的交互过程,需要2.5个RTT的时延。
由于第三次握手是可以携带数据的,这时如果在第三次握手发起HTTP GET请求,需要2个RTT的时延。
但是在下一次(不是同个TCP连接的下一次)发起HTTP GET请求时,经历的RTT也是一样,如下图:
零窗口通知与窗口探测
假设接收方处理数据的速度跟不上接收数据的速度,缓存就会被占满,从而导致接收窗口为0,当发送方接收到零窗口通知时,就会停止发送数据。
由于笔记涉及到的知识点与内容极多,就不一一展示给大家了,这份《计算机网络操作系统》《图解网络》需要完整版笔记的朋友,可以一键三连之后,【见下图】来获取!!
当然,单单有文档看是远远不够的,还有视频和相匹配的课件进行学习提升,努力把计算机网络这一块儿给搞明白,相信一定会有不凡的人生!!
TCP/IP网络协议
网络IO
IO课件
TCP/IP课件
TCP/IP/IO网络通信视频和课件获取,一键三连之后【见下图】获取!
好了,今天就分享到这里了,希望大家能够好好学习,把计算机网络这一块儿给提升上来,也希望本文能够得到大家的喜欢!!