Linux高性能服务器编程 5. Linux服务器程序规范
5. Linux服务器程序规范1.进程 PID进程的PID(Process ID)是操作系统中用于唯一标识一个进程的整数值。每个进程在创建时,操作系统都会分配一个唯一的PID,用来区分不同的进程。 PID的特点1.唯一性: 在操作系统运行的某一时刻,每个进程的PID都是唯一的。不同进程不会共享同一个PID。即使一个进程终止后,该PID可以被回收并分配给新创建的进程,但在同一时刻不会有两个进程拥有相同的PID。 2.进程生命周期: PID 的生命周期与进程的生命周期相对应。当一个进程被创建时,操作系统为它分配一个PID;当进程终止时,该PID被释放,并可能被分配给后续的新进程。 3.系统管理和调试: PID 在进程管理和调试中起着重要作用。系统管理员和开发者可以通过PID来监视、控制和调试进程。例如,使用 ps 命令可以查看系统中所有进程的PID,以及它们的状态、资源使用等信息。使用 kill 命令可以通过PID来终止指定的进程。 PID的分配PID 是由操作系统内核管理和分配的,通常是一个非负整数。PID...
Linux高性能服务器编程 6. 高性能服务器程序框架
6. 高性能服务器程序框架**《Linux 高性能服务器编程》**一书中,把这一章节作为全书的核心,同时作为后续章节的总览。这也意味着我们在经历了前置知识的学习后,正式进入了 Web 服务器项目的核心部分的学习 按照服务器程序的一般原理,服务器可以解构为三个主要模块: **I/O处理单元:**四种I/O模型,两种高效事件处理模式。 **逻辑单元:**两种高效并发模式;逻辑处理方式——有限状态机。 **存储单元:**服务器程序的可选模块,其内容与网络编程本身无关。 1.服务器模型C/S...
Linux高性能服务器编程 多线程并发服务器
多线程并发服务器基于该视频完成 12-多线程并发服务器分析_哔哩哔哩_bilibili 通过的是非阻塞忙轮询的方式实现的 和阻塞等待的区别就是,阻塞是真的阻塞了,而这个方式是一直在问有没有请求有没有请求 linux | c | 多进程并发服务器实现-CSDN博客 可以先看看这篇博客,思路和功能都一样 1.核心思路&功能实现一个服务器可以连接多个客户端,每当accept函数等待到客户端进行连接时 就创建一个子进程; 核心思路:让accept循环阻塞等待客户端,每当有客户端连接时就fork子进程,让子进程去和客户端进行通信,父进程用于监听并使用信号捕捉回收子进程;(子进程关闭用于监听的套接字lfd,父进程关闭用于通信的cfd) **功能:**客户端输入小写字符串,服务器转成大写返回给客户端 2.代码实现warp.h12345678910111213141516171819202122232425262728293031323334353637383940414243#ifndef __WRAP_H_#define...
Linux高性能服务器编程 多进程并发服务器
多进程并发服务器基于该视频完成 11-多进程并发服务器思路分析_哔哩哔哩_bilibili 通过的是非阻塞忙轮询的方式实现的 和阻塞等待的区别就是,阻塞是真的阻塞了,而这个方式是一直在问有没有请求有没有请求 1.核心思路&功能实现一个服务器可以连接多个客户端,每当accept函数等待到客户端进行连接时 就创建一个子进程; 核心思路:让accept循环阻塞等待客户端,每当有客户端连接时就fork子进程,让子进程去和客户端进行通信,父进程用于监听并使用信号捕捉回收子进程;(子进程关闭用于监听的套接字lfd,父进程关闭用于通信的cfd) **功能:**客户端输入小写字符串,服务器转成大写返回给客户端 2.代码实现warp.h12345678910111213141516171819202122232425262728293031323334353637383940414243#ifndef __WRAP_H_#define...
Linux高性能服务器编程 1.IP协议
1. IP协议TCP / IP 模型主要分为以下四层:应用层、传输层、网络层、网络接口层。 IP 协议 (IPv4)IPv4 的首部长度通常为 20B,除非含有可变长选项的部分。 IP 协议为上层协议提供无状态、无连接、不可靠的服务。 无状态(stateless)指 IP 通信双方不同步传输状态信息。这种服务的最大缺点是无法处理乱序和重复的 IP 数据报。优势是简单、高效。 无连接(connectionless)是指 IP 通信双方都不长久的维持对方的任何信息。上层协议每次发送数据的时候,都必须明确指定对方的 IP 地址。 不可靠是指 IP 协议不能保证 IP 数据报准确地到达接收端,只承诺尽最大努力交付,但会返回一个 ICMP 差错报文(超时、终点不可达、源点抑制、参数问题等等) 头部结构 主要字段 标识(identification)占 16 位,用来产生 IP 数据报的标识。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但这个 “标识”...
Linux高性能服务器编程 2. TCP协议
2. TCP协议传输层的协议主要有两个:TCP 和 UDP 协议。TCP 协议相对于 [UDP 协议](https://so.csdn.net/so/search?q=UDP 协议&spm=1001.2101.3001.7020)的主要特点是:面向连接、面向字节流和可靠传输。 使用 TCP 通信的双方都必须建立连接,并分配必要的内核资源。TCP 连接是全双工的,双方的数据读写可以通过同一个连接进行。TCP 连接是一对一的。 [TCP 协议](https://so.csdn.net/so/search?q=TCP 协议&spm=1001.2101.3001.7020)采用发送应答机制,发送端发送的每个 TCP 报文段都必须得到接收方的应答,才认为传输成功。且采用超时重传机制,发送方在发出一个 TCP 报文段后启动定时器,定时时间内未收到应答,将重发。 由于 TCP 报文段会被封装成 IP 数据报发送,而 IP 数据报到达接收端可能会乱序、重复,因此 TCP 协议还会对接收到的 TCP 报文段重排、整理,再交付给应用层。 UDP 协议则和 IP...
Linux高性能服务器编程 3.Linux网络编程基础API
3. Linux网络编程基础API 1.主机字节序和网络字节序现代 CPU 的累加器一次都能装载(至少)4个字节(对于 32 位的机器),即一个 int 类型。那么这4个字节在内存中排列的顺序将影响它被累加器装载的整数值,这就是字节序问题。 字节存储顺序主要分为大端序(Big-endian)和小端序(Little-endian),区别如下 Big-endian:高位字节存入低地址,低位字节存入高地址 Little-endian:低位字节存入低地址,高位字节存入高地址 例如,将12345678h写入1000h开始的内存中,以大端序和小端序模式存放结果如下: 现代 PC 大多采用小端字节序,因此小端字节序又称为主机字节序; 而在两台不同字节序的主机之间传递数据时,发送端总是把要发送的数据转化成大端字节序数据后再发送,因此大端字节序也被称为网络字节序。 网络字节顺序是TCP / IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释,网络字节顺序采用大端排序方式。 “大同小异 ”:大端字节序的...
Ubuntu使用telnet连接时出现的错误 没有到主机的路由 能ping通但是还是报错
Ubuntu使用telnet连接时出现的错误:没有到主机的路由(能ping通但是还是报错)错误如下: 说明: A机:192.168.120.138 B机:192.168.120.139 开启的服务端口是1234 解决方法: 1.检查是不是能ping通如果ping不通,那就先解决这个问题 2.防火墙的问题以下操作要在b机上运行,即开启服务的那个主机 列出所有规则: 1firewall-cmd --list-all 这里看到的只有22和8000端口,刚刚使用ufw开放的端口没有。于是使用相关命令开放端口(1234替换成想指定的端口): 如果是udp也要换成udp而不是用tcp 1firewall-cmd --zone=public --add-port=1234/tcp --permanent 执行完添加端口命令后,一定要重启防火墙才能生效,重启命令如下: 1firewall-cmd...
MIT 6.S081 第二章问题记录
第二章问题记录1.CS模式由于客户/服务器(Client/Server)模式,具有非常多的优点,故在单机微内核操作系统中几乎无一例外地都采用客户/服务器模式,将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器(进程)中实现。 2.Xv6使用页表(由硬件实现)为每个进程提供自己的地址空间。3.操作系统中有哪些操作是由硬件实现的? 内存管理: 虚拟内存管理:通过内存管理单元(MMU),硬件实现虚拟地址到物理地址的转换,支持页表机制来管理进程的内存空间。 页错误处理:当一个进程试图访问未映射的页面时,硬件通过触发页错误中断来通知操作系统进行处理。 页表和虚拟地址到物理地址的转换 中断处理: 外部设备中断:硬件中断控制器(如 APIC)允许外部设备(如键盘、鼠标、磁盘等)向 CPU 发出中断信号,操作系统可以在中断发生时中断当前执行任务,转而处理外部设备的请求。 软件中断和 syscall:CPU...
MySQL笔记:第06章_多表查询
MySQL笔记:第06章_多表查询第06章_多表查询多表查询概述 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。 为什么不把多张表合成一张表?答:多张表合成一张表会导致很多信息的冗余!将不必要的冗余信息从磁盘导入内存将导致很多的磁盘IO。 1.一个案例引发的多表连接1.1 案例说明从多个表中获取数据: 123#案例:查询员工的姓名及其部门名称SELECT last_name, department_nameFROM employees, departments; 查询结果(从上图可以看到:每个员工都与每个部门匹配了一遍,此错误称为笛卡尔积的错误): 12345678910# 2889行结果+-----------+----------------------+| last_name | department_name...














