随笔分类 - linux
摘要:https://www.cnblogs.com/binlovetech/p/17712761.html https://yangjie2.github.io/2021/11/14/mmap原理与应用/ 基础 物理世界中的实体或者逻辑实体在计算机中都用数据结构来表示,比如一个进程就用一个task_st
阅读全文
摘要:https://www.ibm.com/docs/en/aix/7.2?topic=io-direct-vs-normal-cached https://www.ibm.com/docs/en/aix/7.2?topic=io-benefits-direct https://xiaolincodin
阅读全文
摘要:段错误定位 原因是昨天遇到一个BUG,复现概率很小,一直复现了一下午,后来google发现可以用execinfo.h里的backtrace函数及信号处理机制, 来让程序在发生段错误时自动打印调用堆栈。最后终于复现出来了两次,用这个函数也定位到了出错位置,是多线程下的一个同步问题。 之前遇到的BUG基
阅读全文
摘要:看了这篇文章 Linux中的进程栈和线程栈 说主线程生成的子线程的 stack 区是用 mmap 系统调用映射到进程的堆区。于是实践验证一下,代码如下。 void* threadFunction(void* args) { int a = 10; // 线程的局部变量 cout <<"&a : "
阅读全文
摘要:#include <stdlib.h> #include <ucontext.h> #include <stdio.h> int main() { ucontext_t uc; int a = 2, b = 3; getcontext(&uc); printf("asdafa"); int k =
阅读全文
摘要:先打印出某个地址,然后阻塞(getchar())进程,查一下进程的 id,然后执行Linux 命令pmap {pid} 查看进程的空间布局(MAC 使用vmmap {pid}),将之前打印的地址对应到某一段。 using namespace std; #define FUCK(x) cout <<
阅读全文
摘要:调用过程 call f :将当前指令(call)的下一条指令地址压栈,然后跳转到 f 函数。 f 函数初始化:将 rbp 压栈(保存调用者的 rbp),为了返回 main 函数时 rbp 寄存器指向正确的位置。将 rsp 赋值给 rbp,这是 f 函数的栈底。 返回过程 f 过程完了之后。 pop
阅读全文
摘要:1、互斥量 可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。 2、原子操作 std::atomic<int> mutex(1); 对原子变量的操作是线程安全的。 3、读写锁 std::shared_mutex mutex; // 读者:共享锁定 mutex.lock_shared(); m
阅读全文
摘要:内存管理 使用物理内存,不安全。 交换: 运行时把进程载入内存,不运行时放回磁盘。利用基址寄存器和界限寄存器计算动态地址。没法动态分配堆内存。 覆盖: 把程序分为很多段,先装入段0,运行完段0再装入段1,有空间就放在段0上边,否则就覆盖段0。 虚拟内存:让程序只有一部分被调入内存的情况下运行。 动态
阅读全文
摘要:1、 先来先服务 简单,但对短作业不公平。 2、 短作业优先 有抢占和非抢占版本。对长作业不公平,会导致饥饿问题。 3、 高响应比优先 响应比:等待时间/预计运行时间 没有饥饿问题。 4、 时间片轮转 没有饥饿问题。 若时间片小,进程切换频繁,吞吐量低;若时间片长,则响应时间过长,实时性得不到保证
阅读全文
摘要:进程拥有资源,包括:内存空间中的代码、数据等;I/O 资源;打开文件;CPU等。 线程执行任务,线程只拥有CPU和少量寄存器,线程之间共享进程的资源。 为什么需要线程 进程切换开销大,主要包括: CPU的上下文切换:保存和恢复相关寄存器的内容 进程相关的数据结构切换:页表、文件描述符、消息队列等.
阅读全文
摘要:为什么区分内核态和用户态 用户会进行不安全的访问和修改。 操作系统没法进程调度,因为拿不到cpu的执行权。 所以要区分权限,普通进程需要执行特殊操作的时候,需要让内核代为操作(陷入内核)。 什么时候陷入内核 系统调用(trap)、中断(interrupt)和异常(exception)。 系统调用是用
阅读全文
摘要:IO 多路复用 普通情况下,一个进程只能监视一个文件描述符(阻塞),如果使用非阻塞 IO,则会使 CPU 频繁陷入内核和空转,降低效率。而IO 多路复用是操作系统提供的接口,他会帮你同时监视多个 fd,当fd没有事件发生,调用这个接口的用户进程会阻塞,当有事件发生时,返回事件发生的 fd。这样就实现
阅读全文
摘要:线程之间共享代码、资源、进程(内存)空间、打开文件等。 线程同步机制 互斥锁 互斥锁本质是一个全局变量,其值为0时表示没锁,可以对其进行上锁(+1),而且上锁的操作由硬件和操作系统保证是原子操作,所以不存在两个线程同时上一把锁。其值为1时表示上锁,线程再进行lock操作会阻塞自己,并在互斥锁队列里等
阅读全文
摘要:文件的特殊权限:SUID,SGID,SBIT Set UID SUID权限只用于二进制文件 运行者必须有X权限 运行者在程序运行过程(run-time)中具有二进制文件拥有者(owner)的权限 例子:Linux系统中所有的密码都记录在/etc/shadow里,这个文件的权限是[r 1 root r
阅读全文
摘要:字节序转换(hton) #include <netinet/in.h> unsigned long int htonl(unsigned long int hostlong); unsigned short int htons(unsigned short int hostshort); unsig
阅读全文
摘要:readv、writev API: #include <sys/uio.h> ssize_t readv(int fd, const struct iovec* vector, int count); ssize_t writev(int fd, const struct iovec* vector
阅读全文
摘要:可设置参数:连接池最大连接数,最大线程数,任务队列最大值,timeslot epoll epoll监听listen_fd(接受新客户端和断开连接), pipefd(将信号输入到管道用epoll统一管理), client_fd(读:客户端请求, 写:响应请求)。线程池里的线程将客户读了之后,重新将客户
阅读全文
摘要:在程序执行的过程中,有时候会收到信号,我们可以捕捉信号并执行信号处理函数,信号注册函数里有一个struct sigaction的结构体,其中有一个sa_flags的成员,如果sa_flags |= SA_RESTART,那么:若当前进程阻塞在一个系统调用上,这时来了一个信号,前边注册过的并且sa_f
阅读全文
摘要:本文来自博客园,作者:Jcpeng_std,转载请注明原文链接:https://www.cnblogs.com/JCpeng/p/15077235.html 一、查找文件 使用 Linux 经常会遇到这种情况:只知道文件中包含某些特定的字符串,但是不知道具体的文件名。需要根据“关键词”反向查找文件。
阅读全文

浙公网安备 33010602011771号