
Linux
文章平均质量分 82
从前有座山a
这个作者很懒,什么都没留下…
展开
-
内存
由GDTR访问全局描述符表是通过段选择子(实模式下的寄存器)来完成 。段选择子是一个16位的寄存器(同实模式下的段寄存器相同) 段选择子包括三部分:描述符索引(index)、TI、请求级特权(RPL). 在Linux内核中基本不使用局部段描述表LDT,LDT只是在VM86模式中运行wine以及其它在Linux上模拟运行Windows软件或DOS软件的程序中...原创 2019-05-06 21:27:06 · 158 阅读 · 0 评论 -
进程间通信:管道(IPC InterProcess Communication)
进程间通信是指在不同进程之间传播或交换信息。IPC的方式有:管道(有名管道、无名管道)、信号量、共享内存、消息队列、套接字。管道通常指无名管道是NUIX系统IPC最古老的形式。和普通文件最大的区别:写入的文件在内存中特点:1、半双工(同一时刻数据只能在一个方向上流动),具有固定的读端和写端。 2、写管道的数据在内存中。 3、有有名管道...原创 2019-01-02 21:28:34 · 216 阅读 · 0 评论 -
linux文件管理基本命令
操作系统:操作系统是管理软硬件资源,并为用户提供与计算机交互的一种软件。Linux操作系统:本身是免费的 开源 允许多用户的操作系统(允许多个用户同时登陆操作系统进行工作)内核小Windows操作系统: 相反两种系统目录结构:Windows:C盘 D盘Linux:/(根目录)-------最初始位置/bin /home /dev /proc /mnt...原创 2018-11-22 18:51:24 · 742 阅读 · 0 评论 -
Linux基本操作
1、放大终端,"ctrl"+"shift"+"+"2、切换目录,cd ~(切换到个人家目录)3、pwd查看当前目录4、ls查看当前目录的文件和子目录 ls -a显示所有文件、包括隐藏文件5、清屏,clear,或者ctrl+l6、新建文件夹(目录),mkdir文件夹名(目录名),例如mkdir src7、编辑文件:vi 文件名 i进入编辑模式8、删除文件,rm 文件名...原创 2018-10-13 21:54:18 · 228 阅读 · 0 评论 -
Fork底层代码
Linux是抢占多任务操作系统。使用 uname -a 可以查看版本信息进程在她被创建的时刻开始存活。在Linux系统中,这通常是调用Fork()系统调用的结果。该系统通过调用复制一个现有进程来创建一个全新的进程。调用Fork()的进程被称为父进程,新产生的进程被称为子进程。在该调用结束时,在返回点这个相同位置上,父进程恢复执行,子进程开始执行。fork()系统调用从内核返回两次:一...原创 2019-04-22 21:24:38 · 259 阅读 · 0 评论 -
共享内存,消息队列
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效率带来的问题第,我们必须用其他辅助手段来同步进程对共享内存的访问,否则会产生竞态条件。因此,共享内存通常和其他进程间通信方式一起使用。Linux共享内存的API都定义在sys/shm.h头文件中shmget系统调用创建一段新的共享内存,或者获取一段已经存在的共享内存。定义如下:#include<sys/sh...原创 2019-07-23 16:31:53 · 657 阅读 · 0 评论 -
信号 信号量
信号是由、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。Linux信号可以由如下条件产生:1、对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号。比如输入ctrl+c通常或给进程发送一个中断信号2、系统异常。比如浮点异常和非法内存段访问。3、系统状态变化4、运行kill命令或调用kill函数1)改变信号响应方式signal()默...原创 2019-07-23 15:41:57 · 633 阅读 · 0 评论 -
进程和线程
进程的概念:运行中的程序。程序:存储在磁盘上的可执行文件。进程创建:1、给新进程分配一个唯一的进程标识号,此时在主进程表中增加一个新项目,表中的每个项目指向一个进程。(进程标识号部分包括进程ID和其他相关的ID)。2、给进程分配空间。3、初始化进程控制块4、设置正确的连接。例如,如果操作系统把每个调度队列都保存成链表,则新进程必须放置在就绪或挂起链表中。5、创建或扩充其他数据结构。1)f...原创 2019-07-25 22:28:13 · 320 阅读 · 0 评论 -
IP协议
IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。是网络层最核心的协议IP头部信息:IP头部信息出现在每个IP数据报中,用于指定IP通信的源IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。IP数据报的路由和转发。IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。他们决定数据报是否应该转发以及如何转发。IP服务的特点:IP协议是...原创 2019-08-25 18:57:22 · 166 阅读 · 0 评论 -
TCP协议
TCP协议是TCP/P协议族中另一个重要的协议。和IP协议相比,TCP 协议更靠近应用层,因此在应用程序中具有更强的可操作性。一些重要的socket选项都和TCP协议相关。TCP头部信息。TCP头部信息出现在每个TCP报文段中,用于指定通信的源端端口号、目的端端口号,管理TCP连接,控制两个方向的数据流。TCP状态转移过程。TCP 连接的任意一端都是一个状态机。在TCP连接从建立到断开的整...原创 2019-08-27 18:24:43 · 221 阅读 · 0 评论 -
线程(thread)
在一个进程中的多个执行线路就是线程。准确的说线程是进程内部的一条执行路径从分配资源的角度--------》进程的属性从调度、执行的角度--------》线程的属性某一时刻两个线程都在执行---------》(并行)某一时间段内两个线程都在执行-----------》(并发)交替执行一般而言,线程之间的切换需要操作系统做的工作要比进程之间的切换少得多,因此多个线程对资源的需求要远...原创 2019-01-11 16:03:20 · 294 阅读 · 0 评论 -
主函数传参&输出缓冲区&注册退出函数
int main(int argc , char *argv[] , char *envp[]);argc:传递的参数列表中参数的个数argv:传递的参数列表envp:环境变量默认会给主函数传递一个参数:执行的命令#include<stdio.h>#include<unistd.h>#include<stdlib.h>...原创 2019-01-14 15:48:56 · 231 阅读 · 0 评论 -
线程同步
线程同步:信号量 互斥锁 条件变量 读写锁线程安全: 1、同步 2、线程安全的函数#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<as...原创 2019-01-16 21:25:02 · 154 阅读 · 0 评论 -
epoll底层代码
IO复用方法(select poll epoll)select poll :1、每次循环都需要向内核空间拷贝描述符 2、内核实现:轮询方式O(n) 3、找到就绪描述符:O(n)epoll(Linux特有):1、创建内核事件表,每个描述符只添加一次 ...原创 2019-04-26 22:06:14 · 333 阅读 · 0 评论 -
I/O复用(epoll)
epoll是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大差异。首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无需像select和poll那样每次调用都要重复传入文件描述符集或事件集。但epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。这个文件描述符由epoll...原创 2019-03-21 17:06:50 · 179 阅读 · 0 评论 -
Shell编程(1)
shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。虽然shell表面上和Windows的命令提示符相似,但是它具备更强大的功能以完成相当复杂的程序。你不仅可以通过他执行命令、调用Liunx工具,还可以自己编写程序,shell执行shell程序,这些程序通常被称为脚本,他们是在运行时解释执行的。(Linux程序设计 中文第4版)bash是shel...原创 2019-03-20 16:25:28 · 196 阅读 · 0 评论 -
I\O复用(poll)
int poll(struct pollfd*fds,int nfds,int timeout)struct pollfd{ int fd;用户关注的文件描述符 short events;用户关注的事件 short revents;由内核修改,表示发生了哪些}nfds:数组的长度 元素的个数,用户关注的文件描述符的个数...原创 2019-03-16 22:39:07 · 173 阅读 · 0 评论 -
I/O复用(select)
I/O复用(select):一个进程或一个线程能够同时对多个文件描述符提供服务1、TCP服务器设置 socket bind listen2、将socket添加到fds中3、启动while循环 3.1将fds中的文教描述符添加到fdset集合中 3.2启动select 3.3循环探测哪些文件描述符就绪 3.3.1 sockfd 有客户端完成了三次握手 a...原创 2019-03-04 21:23:28 · 190 阅读 · 0 评论 -
exec函数族
替换进程:exec系列execl execlp execle execv execvp(库函数)execve(系统调用)fork+exec创建一个新进程//main1.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<assert.h>#includ...原创 2019-01-21 20:19:42 · 165 阅读 · 0 评论 -
系统调用和库函数及内核态和用户态
系统调用和库函数的区别:1、系统调用的函数实现在内核中2、库函数实现在函数库里 libxxx.a(静态库) libxxx.so(动态库)用户态--》内核态:1、触发0x80中断(系统调用中断)2、保存程序上下文3、将系统调用号保存到eax寄存器系统调用访问设备驱动程序操作系统的核心部分,即内核,是一组设备驱动程序。他们是一组对系统硬件进行控制的底层接...原创 2019-01-20 22:00:15 · 1390 阅读 · 0 评论 -
Process(进程)fork
程序计数器:记录当前执行指令的下一行指令地址。程序:存储在磁盘上的可执行文件。进程:运行中的程序/进程是一组有序指令+数据+资源的集合。操作系统通过PCB(进程控制块/进程描述符)记录进程的相关属性(pid、ppid、优先级、程序计数器、程序上下文等),它不能记录过程,只能记录过程的型关信息。进程控制块就是一个结构体,通过双向循环链表管理(基本的数据结构)进程新生成时,必...原创 2019-01-19 22:43:09 · 1005 阅读 · 0 评论 -
利用文件操作函数实现普通文件的拷贝
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<fcntl.h>//fd文件描述符int main()//利用文件操作函数实现普通文件的拷贝{ int ...原创 2019-01-19 20:46:47 · 927 阅读 · 0 评论 -
Linux文件操作函数
系统调用函数——操作文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>fd:文件描述符在 read write close lseek 函数中使用int open(const char* filename,int flag,/*int mode*/);//返回值...原创 2019-01-18 15:51:33 · 1778 阅读 · 0 评论 -
TCP三次握手四次挥手
TCP的运输连接管理:TCP是面向连接的协议。运输连接时用来传送TCP报文的。TCP运输连接的建立和释放是每次面向连接的通信中必不可少的过程。因此,运运输连接就有三个阶段:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。在TCP连接建立过程中要解决以下三个问题:1、要使每一方能够确知对方的存在2、要允许双方协商一些参数(如最大窗口值、是否使用窗...原创 2019-09-05 14:41:16 · 148 阅读 · 0 评论