自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux下进程的通信方式(一)

在操作系统中,每一个进程都是独立的执行体,但是进程之间需要相互交互,所以就有了进程间通讯。 Linux下进程间的通讯方式有:信号、信号量、管道、消息队列、共享内存、套接字等。1、信号信号是系统预先定义好的一些特定的事件,信号可以被产生,也可以被接收,产生和接收的主体都是进程。接收到信号的进程会采取相应的一些行动。一般信号是由于某些错误条件而生成的,比如内存段冲突、浮点...

2019-08-20 16:05:53 118

原创 进程和线程的区别

一、二者定义进程:进程具有一定独立功能的程序关于某些数据结合上的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。线程:线程是进程的一个实体,是进程内部的一条执行序列,是CPU调度和分派的基本单位。一个进程至少有一条线程。main函数的执行序列为主线程,通过线程创建函数创建并调用的执行序列位函数线程。进程是一个正在运行的程序(动态);线程是进程内部的一条执行路径序列;二、二...

2019-08-20 14:50:40 123

原创 为什么会产生线程?以及多线程的坏处

为什么会产生线程,线程的产生主要是解决什么问题?(1)使用多线程可以减少程序的响应时间。(2)与进程相比,线程的创建和切换开销更小。建立许多数据结构来维护线程代码段、数据段等信息,而运行于同一个进程内的线程共享同一个代码段、数据段,线程的启动或切换的开销就比进程要少到很多。(3)多CPU和多核心计算机本身就具有执行多线程的能力,如果使用单个线程,将无法复制利用计算机资源,造成资源的巨大...

2019-08-20 13:59:58 671

原创 TCP三次握手哪一阶段容易受到攻击,为什么?

首先要分析该问题,就要先搞清楚TCP三次握手的建立连接过程,如下图TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN (ack=j+1) ,同时自己也发送一个SYN包(syn=k)...

2019-08-19 19:46:58 2098

原创 TCP与UDP的区别

一、二者概念传输层协议主要有两个:TCP 协议和UDP协议。TCP协议:是面向连接的、可靠的流式服务。UDP协议:是无连接的、不可靠的数据报服务。TCP协议:通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接...

2019-08-19 19:23:48 82

原创 保护模式

保护模式与实地址模式相对应。在80286以前,CPU只有实时模式,地址总线有20位,而内存地址是16位,也就是最多能够访问2^20=1M的内存空间。在80286及以后,内存地址改为16位或32位,至少可以访问到2^32=4G的内存空间。但为了保证后续的CPU能够运行旧的CPU,只能保持向下兼容。因此,80286及以后的CPU首先进入实模式,然后通过切换机制再进入到保护模式。 ...

2019-08-17 23:32:45 145

原创 实地址模式

在实地址模式下,内存寻址方式和8086相同,由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86CPU用做高速的8086。在实模式下,所有的段都是可以读、写和可执行的。实地址模式:以8086为代表,物理地址=段寄存器<<4 + 偏移量,对内存的访问...

2019-08-17 16:38:18 942

原创 Linux系统调用的过程

系统调用用户态切换内核态的引发原因: 调用系统调用函数 ——>软中断 缺页异常——>硬中断系统调用的过程: 产生0X80号中断,保存当前进程的现场信息,将系统调用的系统调用号写入eax寄存器中。中断处理程序执行,也即切换到了内核...

2019-08-17 12:20:26 115

原创 管道为什么是半双工?

一、管道是半双工通信的原因由于Linux一个命令只能完成一个功能,所以一个复杂点的任务需要好几个进程协同完成,第一个进程处理结果需交给第二个进程,然后一次交给第三个,等等,像流水线完成某个商品的生产一样,这个过程只需要数据单向往下传输,所以设计的时候做成了半双工。当然也可以使用管道实现双工通信,需要两个管道。二、三种通信方式的区别单工通信:传输方向只有一个方向,单工通信只有一根数据线,...

2019-08-16 22:48:59 4202 3

原创 文件描述符

一、什么是文件描述符 在Linux上一切皆文件,文件描述符是内核为了高效的管理已经被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件,所有执行的I/O操作的系统调用都是文件描述符完成的。在Linux中,进程是通过文件描述符来访问文件的,文件描述符实际上是一个整数,程序启动时默认有三个文件描述符,分别是:0 stdin ...

2019-08-16 22:25:54 254

原创 栈和堆的概念和区别

一、概念区分 在进程地址布局(如下图),可见地址的分布情况,栈和堆所在的位置区域。 栈:由编译器自动分配释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。每当一个函数被调用,该函数返回地址和一些关于调用的信息,比如某些寄存器的内容,被存储到栈区。然后这个被调用的函数再为它的自动变量和临时变量在栈区上分配空间,这就是C实现函数递归调用的方法。...

2019-07-23 16:27:29 484

原创 new和malloc的区别

在c++中开辟内存,常用关键字new来开辟,new+类型 eg:int *p=new int; new来分配内存时:(1)调用operator new 函数(对于数组是operator new[])分配一块足够大的、未名的内 存空间以便存储特定类型的对象...

2019-07-22 18:49:13 109

原创 4G虚拟地址空间布局

4G虚拟地址空间布局如下图所示:一、其中,用户进程部分分段存储内容如下表所示(按地址递增顺序)名称 存储内容 代码段(.text) 可执行代码、字符串字面值、只读变量 数据段(.data) 已初始化且初始值为非0的全局变量和静态局部变量 BSS段 未初始化或初始值为0的全局变量和静态局部变量 栈 局部变量、函数参数、返回地址...

2019-07-18 22:46:10 327 1

原创 不定长顺序表

一、不定长顺序表:与定长顺序表相比不定长顺序表的区别在于我们可以通过扩容来进行增添元素的存储单元。二、不定长顺序表的结构:是对定长顺序表的一种改进,在初始时开辟内存被利用完后,还要继续插入数据时,这时候据需要扩容。故顺序表的结构设计就要发生变化。三、不定长顺序表的操作:1、初始化2、判空3、判满、扩容4、任意pos位置的插入5、删除key值6、删除pos位置的数...

2019-05-06 23:25:04 236

原创 定长顺序表

一、顺序表:逻辑相邻,物理地址也相邻二、顺序表的结构:三、 顺序表的操作:1、初始化2、任意pos位置的插入3、删除某个数据4、删除指定位置的数据,并保存该数据。5、获取任意位置的数据6、修改任意位置的数据7、查找某个数据,并返回其下标8、打印顺序表9、销毁//Seqlist.h//定长顺序表#pragma once#define ...

2019-04-21 12:18:58 105

原创 字符串常量与字符数组的内部存储区别

例如:在主函数中,二者int main(){    char *str1 = "abcde";    //字符串常量    char str2[] = "abcde";     //字符数组    str1[0] = 'x';  //str1中只存放了"abcde"的地址,所以不能对其进行修改,这个语句语法没有错,但编译出现崩溃    str2[0] = 'x';  //字符数组st...

2018-07-17 00:16:12 538

原创 计算字符串长度—sizeof 与 strlen 的区别

sizeof:计算数组长度,返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,该类型保证能容纳实现所建立的最大对象的字节大小strlen:计算字符串的有效长度(不包括'\0')以下是strlen函数实现代码:我们根据sizeof、strlen的区别,来分析计算出主函数输出的值。#include &lt;stdio.h&gt;#include &...

2018-07-16 23:53:57 2345

原创 指针与地址

实际上,指针==地址取地址符&amp;表示取变量地址就是在变量前加&amp;   “*”表示解引用或间接访问符int a=10;int *p=&amp;a *p表示整型地址变量  &amp;a表示整型地址值  将a的整型地址值赋给整型地址变量P                           *p=100;     间接把a的值修改为100 int **pp=&amp;p;  **pp整型地址...

2018-07-11 22:00:42 4557

原创 如何判断运算为几进制

例:假设在n进制下,下面的等式成立,567*456=150216,n的值是A.9            B.10           C.12          D.18第一步:先用末尾位(个位)判断:我们可以看出乘法运算的个位相乘还等于各位的值,所以7*6=42,但经过进制转化就是6,因而我们可以得到这个结论,42%n=6    用排除法把选项带进去运算,只能排除B选项。(一般难度的题用第一步就...

2018-07-11 15:39:15 5792

java的应用题

快期末了,整理一下笔记,因为是总结嘛,比较杂的知识都没有放,都是和java相关的比较重要的知识。 这学期状态一直不太好,数组和图都没有好好搞,这个寒假会完善一下的

2018-12-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除