缓冲区位置在哪里 网络收发过程中 (缓冲区位于哪里)

本文目录导航:

网络收发过程中,缓冲区位置在哪里?

在 关于 Linux 网络,你必须要知道这些 中,我曾介绍过 Linux 网络的收发流程。

这个流程涉及到了多个队列和缓冲区,包括: 不过相应的,就会有两个问题。

首先,这些缓冲区的位置在哪儿?是在网卡硬件中,还是在内存中?这个问题其实仔细想一下,就很容易明白——这些缓冲区都处于内核管理的内存中。

其中,环形缓冲区,由于需要 DMA 与网卡交互,理应属于网卡设备驱动的范围。

sk_buff 缓冲区,是一个维护网络帧结构的双向链表,链表中的每一个元素都是一个网络帧(Packet)。

虽然 TCP/IP 协议栈分了好几层,但上下不同层之间的传递,实际上只需要操作这个数据结构中的指针,而无需进行数据复制。

套接字缓冲区,则允许应用程序,给每个套接字配置不同大小的接收或发送缓冲区。

应用程序发送数据,实际上就是将数据写入缓冲区;而接收数据,其实就是从缓冲区中读取。

至于缓冲区中数据的进一步处理,则由传输层的 TCP 或 UDP 协议来完成。

其次,这些缓冲区,跟前面内存部分讲到的 Buffer 和 Cache 有什么关联吗? 这个问题其实也不难回答。

我在内存模块曾提到过,内存中提到的 Buffer ,都跟块设备直接相关;而其他的都是 Cache。

实际上,sk_buff、套接字缓冲、连接跟踪等,都通过 slab 分配器来管理。

你可以直接通过 /proc/slabinfo,来查看它们占用的内存大小。

第二个问题,内核协议栈的运行,是按照一个内核线程的方式吗?在内核中,又是如何执行网络协议栈的呢? 说到网络收发,在中断处理文章中我曾讲过,其中的软中断处理,就有专门的内核线程 ksoftirqd。

每个 CPU 都会绑定一个 ksoftirqd 内核线程,比如, 2 个 CPU 时,就会有 ksoftirqd/0 和 ksoftirqd/1 这两个内核线程。

不过要注意,并非所有网络功能,都在软中断内核线程中处理。

内核中还有很多其他机制(比如硬中断、kworker、slab 等),这些机制一起协同工作,才能保证整个网络协议栈的正常运行。

我们知道,无论 TCP 还是 UDP,端口号都只占 16 位,也就说其最大值也只有 。

那是不是说,如果使用 TCP 协议,在单台机器、单个 IP 地址时,并发连接数最大也只有 呢? 对于这个问题,首先你要知道,Linux 协议栈,通过五元组来标志一个连接(即协议,源 IP、源端口、目的 IP、目的端口)。

明白了这一点,这个问题其实就有了思路。

我们应该分客户端和服务器端,这两种场景来分析。

对客户端来说,每次发起 TCP 连接请求时,都需要分配一个空闲的本地端口,去连接远端的服务器。

由于这个本地端口是独占的,所以客户端最多只能发起 个连接。

对服务器端来说,其通常监听在固定端口上(比如 80 端口),等待客户端的连接。

根据五元组结构,我们知道,客户端的 IP 和端口都是可变的。

如果不考虑 IP 地址分类以及资源限制,服务器端的理论最大连接数,可以达到 2 的 48 次方(IP 为 32 位,端口号为 16 位),远大于 。

所以,综合来看,客户端最大支持 个连接,而服务器端可支持的连接数是海量的。

当然,由于 Linux 协议栈本身的性能,以及各种物理和软件的资源限制等,这么大的连接数,还是远远达不到的(实际上,C10M 就已经很难了)。

缓冲区位置在哪里 网络收发过程中 (缓冲区位于哪里)

i/o缓冲区、内核缓冲区

1、缓冲区数据交换 用户进程是运行在用户空间的,不能直接操作内核缓冲区的数据。

用户进程进行系统调用的时候,会由用户态切换到内核态,待内核处理完之后再返回用户态。

例如:read把数据从内核缓冲区复制到进程i/o缓冲区,write把数据从进程i/o缓冲区复制到内核缓冲区,内核缓冲区再和磁盘之间的交换。

程序和磁盘交换细节用户i/o缓冲区的类型: 全缓冲 此种类型的缓冲只有在缓冲区满的时候才会调用实际的文件 IO 进入内核态操作。

除了涉及到终端设备文件的流,其它文件流默认基本都是全缓冲。

行缓冲 此种类型的缓冲在缓冲区满或者遇到 \n 的时候才会调用实际的文件 IO 进入内核态操作。

当流涉及到终端设备的时候就是行缓冲,比如标准输入流和标准输出流。

如果对标准输入流或者输出流进行重定向到某个文件的时候,该流就是全缓冲的。

无缓冲 没有缓冲区。

直接调用文件 IO 进入内核态操作。

标准错误流默认就是无缓冲的。

2、下边举一个例子加深理解: 每个进程都有一个标准i/o缓冲,缓冲区是使用malloc申请的,所以缓冲区是在堆区 #include <stdio.h> #include <stdlib.h> intmain(){ for(inti=0;i<2;i++) { fork(); printf(*); } return0; } i=0时:主进程子进程都会在各自的缓冲区输入一个*, i=1时:新创建的两个进程会从父进程复制缓冲区,会继承下来一个*,自己在往缓冲区塞一个*,因此各自都有两个*。

同时i=0时创建的两个进程也会往各自的缓冲区塞一个*。

这时各个进程的缓冲区都有两个*,所以一共8个*。

电脑重装系统读盘电脑重装系统中断后开机出现磁盘读取错误

① 重装系统之前如何读盘

设置光驱启动1、AwardBion4.51PG设置重启,按DEL进入BIOSAward4.51PG界面,用功能键区方向键选第二行“BIOSFeaturesSetup”(BIOS特性设置),回车进入BIOSFeaturesSetup界面,找到第七行“BootSequence”,用PgUp或PgDn翻页将它右边显示的A,C,换成CDROM,C,A。

按ESC,按F10,再打Y保存退出。

或AwardBIOS6.0设置重启,按Del进入BIOS6.0设置界面,找到AdvancedBiosFeatures(高级BIOS参数设置)按回车进AdvancedBiosFeatures界面,用键盘方向键盘选定FirstBootDevice,用PgUp或PgDn翻页将它右边的HDD-O改为CDROM(光驱启动),按ESC,按F10,再打Y保存退出。

2、将XP安装光盘插入光驱,重启,在看到屏幕底部出现CD……字样的时候,及时按任意键,否则计算机跳过光启又从硬盘启动了。

XP系统盘光启之后便是开始安装程序、复制文件、加载硬件驱动进到安装向导中文界面。

;

② 电脑重装系统中断后,开机出现磁盘读取错误

可以重新重装一遍,在重装过程中,格式化硬盘,或者删除分区,重新分区,然后再重装就可以了。

(在之前的系统上,你没有刷过吧)下面给你演示下u盘重装系统的过程。

一、准备工具

1、一个U盘(尽量8G以上)

2、一台正常能上网的电脑

3、下载小白一键重装系统工具

二、安装思路

1、找一台能正常使用的电脑和一个U盘,通过下载小白工具,然后制作一个U盘启动工具

2、把制作好的U盘工具,插到无法开机的笔记本上,按启动热键进入U盘PE系统安装系统即可.

具体步骤如下:

1、打开小白一键重装系统软件,退出杀毒软件,等待软件检测本地环境完成后进入主界面,然后将U盘插入电脑,点击制作系统,开始制作u盘启动盘。

③ 我的电脑重装系统光盘读不出来

可能的问题:1.光驱坏了。

建议:先换新光驱,再装系统。

2.电脑没有设置为光盘启动模式。

建议:先将bios设置为光盘启动模式。

具体如下:(1).启动计算机,并按住DEL键不放,直到出现BIOS设置窗口(通常为蓝色背景,黄色英文字)。

(2).选择并进入第二项,“BIOSSETUP”(BIOS设置)。

在里面找到包含BOOT文字的项或组,并找到依次排列的“FIRST”“SECEND”“THIRD”三项,分别代表“第一项启动”“第二项启动”和“第三项启动”。

这里我们按顺序依次设置为“光驱”“软驱”“硬盘”即可。

(如在这一页没有见到这三项E文,通常BOOT右边的选项菜单为“SETUP”,这时按回车进入即可看到了)应该选择“FIRST”敲回车键,在出来的子菜单选择CD-ROM。

再按回车键(3).选择好启动方式后,按F10键,出现E文对话框,按“Y”键(可省略),并回车,计算机自动重启,证明更改的设置生效了。

可以不用恢复的,只要不放入光盘还是还正常启动一样要恢复的话,按上述操作把FIRST设置为硬盘HDD-0就可以

④ 重装系统时开机放入光盘读盘,怎么进入系统盘选项啊

进入系统盘选项的操作方法和步骤如下:

1、首先,打开计算机机箱上的光盘驱动器,插入光盘,并关闭光盘驱动器,计算机将自动重启,如下图所示。

⑤ 重装系统的时候为什么系统盘读不出来而是跳过直接进入原来的系统

因为你没有把CD\ROM设为第一启动项,具体方法如下,开机时瞬间按下F2笔记本,台式机按下DEL,速度要快,要不然就从硬盘启动了,之后你就进入了注册表,在注册表里,1、重启,按Del进BIOS,找到AdvancedBiosFeatures(高级BIOS参数设置)按回车进AdvancedBiosFeatures(高级BIOS参数设置)界面。

FirstBootDevice开机启动顺序1。

SecondBootDevice开机启动顺序2。

ThirdBootDevice开机启动顺序3。

正常设置是:FirstBootDevice设为HDD-O(硬盘启动)SecondBootDevice设为CDROM(光驱启动)ThirdBootDevice设为FIOPPY(软驱)2、当重装系统需从光驱启动时,按DEL进BIOS设置,找到FirstBootDevice,将其设为CDROM(光驱启动),方法是用键盘方向键盘选定FirstBootDevice,用PgUp或PgDn翻页将HDD-O改为CDROM,按ESC,按F10,再按Y,保存退出。

将安装光盘放入光驱重启,当界面底部出现CD……时及时按任意键,即将安装光盘打开,否则又进入硬盘启动了。

。

记住重装系统完成后,再用以上方法将硬盘改为启动顺序1。

记住啊,设置好了以后要按F10保存。

我以台式机为例的,笔记本也一样的

⑥ 重装系统u盘读不出来

1、重新启动电脑,开机按F2或者F12或者delete键(这个随个人电脑的不同按键不同,不知道的可以查阅说明书或者全按,一般开机时会显示)进入到BIOS界面。

出现大致如图的界面,表示第一步完成。

2、要修改一些参数,修改一定要慎重,修改前最后将原先的值做记录。修改操作如下:

在Security 目录下找到Secure Boot ,设置为:Disabled;

在Startup目录下找到UEFI/Legacy Boot ,设置为:Both(原选项为:UEFI Only)

在新显示的 UEFI/Legacy Boot Priority 设置为:UEFI First

找到start选项,将u盘或者usb光驱选为第一个(按-+号选择,注意使用加号需要按住shift键)。

修改完成后按F10保存退出,重新启动。

再次启动就会发现进入到了优盘或者启动盘中。

操作完成后记得将配置改回原有配置。

⑦ 想用光盘重装系统,开机时按什么键能让计算机直接读光驱

一般按del是进bios(uefi)找到引导有些可以按f1-12直接进引导把第一引导设置成光驱就行。

⑧ DELL电脑重装系统不读盘解决步骤方法

dell电脑很受中层用户欢迎,不过有时出现重装系统无法读盘情况,怎么解决呢。接下来是我为大家收集的DELL电脑重装系统不读盘解决办法,欢迎大家阅读:

DELL电脑重装系统不读盘解决办法

一.光驱不能被机器识别,也就是通常说的认不到光驱

机器认不到光驱的情况一般来说有可能是光驱坏掉了,但在DELL的机器很有可能只是BIOS的信息出错而已,简单恢复一下就可以了。

不过在恢复BIOS的信息以前,我们还要确定一下,光驱的跳线的位置,很多问题也是出在这个地方。

DELL机器的BIOS对跳线有特别的要求,即必须跳到cable select的模式上才可以,而不是象大多数兼容机一样的slave。

具体跳线的图示和位置一般都在光驱的表面标明。

恢复BIOS的方法分新机型和旧机型2种

1.老机型的方法:

1)、开机后,在看到DELL图标时,按3下F2,进入BIOS。(灰色界面)

2)、分别按键盘上的Caps Lock, Scroll Lock, 以及 Num Lock三个键,使键盘上相应的三个指示灯点亮。

3)、同时按下Alt + E 组合键。

这时系统将会发出“嘀”的一声,表明NVRAM已被清除。

4)、按Alt + F 组合键,恢复BIOS出厂设置,当然也有“嘀”的一声。

5)、按Alt + B 组合键,将所做的更改保存,重新启动机器。

然后就在一行英文这里停住半分钟左右,随后如果找到光驱,机器就会进入系统就会看到光驱的盘符了。

2.新机型的方法比较简单:

1)、开机后,在看到DELL图标时,按3下F2,进入BIOS。(蓝色界面)

2)、按Alt + F 组合键,恢复BIOS出厂设置。

3)、按ESC键,选择SAVE/EXIT并回车来保存退出。

该操作可谓是万金油,能解决大多数的端口问题,例如:打印口问题/串口问题/软驱端口/光驱检测不到/鼠标键盘等等等等

注意:当做完该操作之后,默认是将软驱端口打开,如果用的电脑没有装软驱,则会再每次开机时报Diskette drive 0 seek failure, F1。

。

。

F2。

。

。

错误,那么就需要进BIOS将软驱端口关闭。

一、开机的时候按F2进入BIOS〉翻到第二页“Advanced”〉将USB BIOS Legacy Support选项禁用(改为Disabled)〉F10保存退出即可,此时USB设备(鼠标键盘无法使用)安装后改回来就可以试试这个看行不行?

二、恢复BIOS的方法分新机型和旧机型2种

1.老机型的方法:

1)、开机后,在看到DELL图标时,按3下F2,进入BIOS。(灰色界面)

2)、分别按键盘上的Caps Lock, Scroll Lock, 以及 Num Lock三个键,使键盘上相应的三个指示灯点亮。

3)、同时按下Alt + E 组合键。

这时系统将会发出“嘀”的一声,表明NVRAM已被清除。

4)、按Alt + F 组合键,恢复BIOS出厂设置,当然也有“嘀”的一声。

5)、按Alt + B 组合键,将所做的更改保存,重新启动机器。

然后就在一行英文这里停住半分钟左右,随后如果找到光驱,机器就会进入系统就会看到光驱的盘符了。

2.新机型的方法比较简单:

1)、开机后,在看到DELL图标时,按3下F2,进入BIOS。(蓝色界面)

2)、按Alt + F 组合键,恢复BIOS出厂设置。

3)、按ESC键,选择SAVE/EXIT并回车来保存退出。

该操作可谓是万金油,能解决大多数的端口问题,例如:打印口问题/串口问题/软驱端口/光驱检测不到/鼠标键盘等等等等

三、原版Windows 2000/XP/2003安装光盘都可以通过以下两种方式来启动安装程序:

⑴、在电脑原有的Windows系统下,运行光盘上的程序来启动安装程序。

这种安装方式会在C盘写入一些安装时必需用到的临时文件,所以在安装过程中C盘不能被删除也不能

被重新格式化,C盘原有的旧文件无法被彻底清除。

因此,这种安装方式是不彻底的,不推荐大家使用。

⑵、开机后直接从光盘引导进入安装程序,这也是下面详细介绍的推荐安装方式。

对于新购买的没有安装操作系统的电脑,这也是唯一的安装方式。另外,只有这样启动安装程序,

才可以在安装过程中对整个硬盘进行分区,或是格式化C盘来彻底清除C盘的旧文件。

★特别提醒:如果在安装过程中进行硬盘分区操作,硬盘上的全部数据都将会被删除

(不重新分区的话只有C盘的数据会全部丢失),请务必事先做好重要数据的备份工作。

相关阅读:操作系统常见故障核心知识

1、进程与线程

1 进程与线程的概念

进程:是一定功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源调度和分配的独立单位。

线程:是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

2 进程与线程的关系

a. 一个线程可以创建和撤销另一个线程,一个进程中可以多个线程并发执行;

b. 相对进程而言,线程更加接近于执行体的概念,多个线程可以共享同一个进程的资源,每个线程还有自己私有的桟空间并拥有独立的执行序列。

c. 进程有独立的地址空间,在保护模式下,进程崩溃时不会对其他进程有影响。

线程有自己的堆桟和局部变量,但是线程之间没有独立的地址空间,所以一个线程的死亡就相当于进程的死亡。

因此,多进程的程序比多线程的程序具有更好的健壮性,但是进程间切换耗费资源较大,大约是线程间切换的十倍,所以多线程拥有更高的效率

线程和进程的区别联系:

1,进程:子进程是父进程的复制品。

子进程获得父进程数据空间、堆和栈的复制品。

2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

两者都可以提高程序的并发度,提高程序运行效率和响应时间。

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。

同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:

1、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。

2、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。

3、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内

2、进程间通信

进程间通信主要有:管道、系统IPC(消息队列、信号量、共享存储)和socket。

管道主要分为普通管道、流管道、命名管道。

管道是一种半双工的通信方式,数据只能单项流动,并且只能在具有亲缘关系的进程间流动,进程的亲缘关系通常是父子进程

命名管道也是半双工的通信方式,它允许无亲缘关系的进程间进行通信 信号量是一个计数器,用来控制多个进程对资源的访问,它通常作为一种锁机制。

消息队列是消息的链表,存放在内核中并由消息队列标识符标识。

信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

共享内存就是映射一段能被其它进程访问的内存,这段共享内存由一个进程创建,但是多个进程可以访问。

3、缓冲区溢出

概念: 缓冲区溢出是指计算机向缓冲区填写的数据超过了缓冲区的容量,数据覆盖在其他合法区域上。

危害: 程序崩溃,导致拒绝服务;跳转并执行一段恶意代码

注:缓冲区溢出的原因是程序员没有对输入数据进行检查。

4、死锁

1 概念:在两个及两个进程并发执行的过程中,有的线程持有了一部分资源,又在等待其他进程持有的资源,资源的互相持有和等待就导致了进程死锁。

2 死锁产生的四个条件(ACID):

互斥性: 一个资源只能被一个进程持有

请求和保持:一个进程因请求资源而阻塞导致原来持有的资源得不到释放

不可剥夺: 进程未完成功能之前,不可强制释放当前所持有的资源

环路等待: 若干进程之间形成环路等待资源的情形

3 解决死锁的方法:

解决死锁的基本思路就是破坏死锁产生的四个必要条件

解决死锁的基本方法如下:

预防死锁、避免死锁、检测死锁、解除死锁

解决四多的常用策略如下:

鸵鸟策略、预防策略、避免策略、检测与解除死锁

5、进程调度的策略

FCFS(先来先服务)、优先级、时间片轮转、多级反馈

6、进程同步的方式

原子操作、信号量、自旋锁管程、会合、分布式系统

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读