
Linux之美
文章平均质量分 91
xjtu_qyq
个人的bug与patch持续更新 https://bugs.launchpad.net/~qianyuqiao
展开
-
对于位置无关代码的理解
这个概念其实很好理解。对于一个可重定位目标文件,里面一定有很多需要重定位的符号。这些符号需要在静态链接器进行链接的时候回填绝对的虚拟内存地址。这种叫做位置有关代码。而位置无关代码的意思是,在动态链接阶段(这个阶段可以发生在装载时也可以发生在运行时)无需回填具体的代码段,而是只需要回填全局偏移量表(GOT)与过程链接表(PLT)即可。位置无关代码与位置有关代码的根本区别在于:链接阶段是否...原创 2019-08-22 21:25:08 · 1493 阅读 · 0 评论 -
关于阻塞I/O 非阻塞I/O 同步I/O 异步I/O epoll select的学习
之前参考了这篇文章,下面写一写笔记阻塞IO 非阻塞IO1.blocking IOlinux中默认的socket都是阻塞的用户进程发出系统调用后,数据未准备好,进程阻塞。。之后内核中有两个阶段:准备数据,复制数据到用户空间,数据在复制好了之后,内核将会唤醒该进程特点:在数据准备与数据拷贝两个阶段进程都是阻塞的2.non blocking IOlinux下,可以通过设...原创 2020-02-19 02:08:18 · 179 阅读 · 0 评论 -
ksoftirqd/n 占用cpu 100%
1.背景当来自设备的中断时,操作系统会暂停它正在执行的操作并开始寻址该中断。在某些情况下,IRQ一个接一个地非常快,操作系统无法在另一个到达之前完成一个服务。当高速网卡在短时间内收到大量数据包时,就会发生这种情况。因为操作系统在到达时无法处理IRQ(因为它们一个接一个地到达得太快),操作系统会将它们排队等待稍后由名为ksoftirqd的特殊内部进程处理。如果ksoftirqd占用的...原创 2019-09-18 22:31:55 · 32001 阅读 · 1 评论 -
条件变量为什么要和互斥锁一起用
pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活看一种情况int sig = 0;void p1(){ if (sig == 0) pthread_cond_wait();}void p2(){ sig = 1;}有一种如下的情况p1: if (sig == 0)p2: sig = 2;p1: wait...原创 2020-03-27 21:31:49 · 1371 阅读 · 0 评论 -
ubuntu16.04开机卡死解决方案
最近由于一个开机脚本写成了Restart: on-Failure导致开机疯狂重启从而报错解决方案:利用一个ubuntu启动盘启动使用use gnome without install然后将大硬盘挂载到当前的文件系统一般会挂载到/media下面然后进入/media 下面就会出现原来的文件系统删除出错的脚本就行...原创 2020-05-19 12:22:55 · 1194 阅读 · 0 评论 -
操作系统的调度算法
http://www.360doc.com/content/18/1125/16/29771970_797145962.shtml1.先来先服务(FCFS)2.短作业优先(SJF) (非抢占式)3.最短剩余时间优先(抢占式的短作业优先)4.轮转法(RR,强占式)5.多级反馈队列6.优先级调度...原创 2020-04-24 21:33:10 · 278 阅读 · 0 评论 -
Linux命令
1.sed2.grep3.使用Linux命令找出日志文件中访问量最大的top10 IP地址cat test.log|awk -F" " '{print $2}'|sort|uniq -c|sort -nrk 1 -t' '|awk -F" " '{print $2}'|head -10问题剖析:1.cat *.log将文本内容打印到屏幕2.使用awk...原创 2020-04-13 16:44:02 · 147 阅读 · 0 评论 -
ps的各字母含义
原创 2020-03-29 12:38:18 · 660 阅读 · 0 评论 -
僵尸进程的生成以及几种避免方法
#include <iostream>#include <unistd.h>#include <stdlib.h>using namespace std;int main(){ pid_t pid = fork(); if (pid > 0) { cout << "in parent" <...原创 2020-03-28 23:10:15 · 425 阅读 · 0 评论 -
详解coredump
1.什么是coredump??在程序运行过程中出bug而异常退出,在一些情况下会生成一个coredump文件。包含着内存信息,寄存器信息,堆栈指针(1)查看core文件是否打开:ulimit -c我的刚开始是0,所以即使显示段错误也不生成core文件(2)coredump文件位置提示 Segmentation fault,但在当前目录下却没有找到 coredump 文...原创 2020-03-28 22:00:15 · 405 阅读 · 0 评论 -
从内核角度看看pthread_create创建的线程共享进程哪些资源
#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <unistd.h>void* p1(void* args){ printf("hello world\n"); sleep(3);}int main(){ pthread_t...原创 2020-03-26 23:03:59 · 406 阅读 · 0 评论 -
为什么ET模式下socket文件描述符要设置成非阻塞的?
网上许多地方说的都根本看不懂。。。原因其实很简单,在主流程中,是 while( 1 ) { int ret = epoll_wait( epollfd, events, MAX_EVENT_NUMBER, -1 ); if ( ret < 0 ) { printf( "epoll failure\...原创 2020-03-14 20:09:54 · 1790 阅读 · 6 评论 -
objdump反汇编用法示例
objdump反汇编用法示例原文:http://blog.youkuaiyun.com/zoomdy/article/details/50563680-d:将代码段反汇编-S:将代码段反汇编的同时,将反汇编代码和源代码交替显示,编译时需要给出-g,即需要调试信息。-C:将C++符号名逆向解析。-l:反汇编代码中插入源代码的文件名和行号。-j section:仅反汇编指定的section。可以有多...转载 2020-03-02 22:52:10 · 650 阅读 · 0 评论 -
TSS和内核态堆栈的关系
中断发生时:mov eax ssmov ebx espesp = tss->esp0ss = tss->ss0push esppush ss中断返回时pop sspop esp原创 2020-02-23 00:44:54 · 372 阅读 · 0 评论 -
fork()会拷贝子线程吗?
之前为了方便起见,博客都迁移到github上了,今天突然想到一个很有意思的问题,https://www.cnblogs.com/liyuan989/p/4279210.html答案:不会为什么呢?这要从子线程的定义和fork()的源码说起首先,什么样的条件下A是B的子线程呢?A的线程组的头目且B的tgid和A的PID相同,1.新建了子进程后,子进程的PID是新的!!!!!!...原创 2020-02-19 01:07:55 · 1099 阅读 · 1 评论 -
The target you are trying to run requires an OpenSSL implementation.
我在安装grpc的时候遇到了这个问题DEPENDENCY ERRORThe target you are trying to run requires an OpenSSL implementation.Your system doesn't have one, and either the third_party directorydoesn't have it, or your ...原创 2019-06-21 17:40:37 · 1401 阅读 · 1 评论 -
最清楚的mmap()详解与源码分析
内核版本: 4.1函数原型 void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 这是mmap的函数原型,而系统调用的接口在mm/map.c中的: unsigned long ksys_mmap_pgoff(unsigned ...转载 2019-07-31 15:21:37 · 1581 阅读 · 0 评论 -
Ubuntu16.04中的可重定位目标文件
最近在看《CSAPP》这本神书,其中看到了第七章链接中的可重定位目标文件,自己动手在ubuntu16.04上试了一试,发现有很多都做了一些改动,在此记录1.源程序main.cstatic int a = 1;int buf[2] = {1,2};void swap();int main(){ a = 2; swap(); return 0;}s...原创 2019-08-20 15:44:29 · 388 阅读 · 0 评论 -
linux 0地址的妙用
1.楔子我在学习list_head这个结构体的时候偶然发现了0地址这个东西,其中list_head是内嵌于许多数据结构的比如用的最多的页struct page { ...... struct list_head lru; .....}在伙伴系统中,可以利用page中lru的地址来找到page的地址,其中就是使用的0地址的思想2. "0地址"的使...原创 2019-09-02 18:22:14 · 875 阅读 · 0 评论 -
Linux命令 ps --ppid使用的一个坑
看一下下面这个命令ps --ppid [父进程名] -o pid=这个命令会打印出这个父进程下的所有子进程(非递归)但是,如果父进程下没有子进程,这个命令不打印任何东西并且返回错误码1!例如:def test(pid): print execute(["ps", "--ppid", str(pid), "-o", "pid="])test(27842)结果...原创 2019-09-05 20:06:12 · 5945 阅读 · 0 评论 -
linux shell Bad substitution
我的脚本1.sh是以#! /bin/bash开头的执行sh 1.sh会报错1.sh: 6: 1.sh: Bad substitution这种情况出现在这一行name=${line:0:3}原因是ubuntu的sh是连接指向dash的,而不是bash,在执行${line:0:3}的时候会出问题把执行方法改为bash 1.sh就好了...原创 2018-12-18 10:56:58 · 983 阅读 · 1 评论