深入解析Linux线程与信号关系

1.线程与信号的关联::线程与信号的关系遵循以下几个标准::标准1:同一线程组的线程共享信号处理函数。标准2:线程拥有独立的信号阻塞集。标准3:存在私有未决信号队列和共享未决信号队列。标准4:当收到致命信号时,线程组将退出。2.同一线程组线程之间共享信号处理函数。:创建进程时,线程task_struct对象sighand成员会指向主线程指向的structsighand_struct对象,线程组所有线程共享主线程信号表。原来的进程此时理解为主线程。:**3.线程

Linux内核调试技巧揭秘

什么是kdump?:Kdump的概念出现在2005左右,是迄今为止最可靠的内核转存机制,已经被主要的linux™厂商选用。kdump是一种先进的基于kexec的内核崩溃转储机制。当系统崩溃时,kdump使用kexec启动到第二个内核。第二个内核通常叫做捕获内核,以很小的内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二个内核启动用。由于kdump利用kexec启动捕获内核,绕过了BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。kdu

深入解析Linux进程控制技巧

一个父进程可以创建多个子进程,而一个子进程只能有一个父进程。因此,对于子进程来说,父进程是不需要被标识的;而对于父进程来说,子进程是需要被标识的,因为父进程创建子进程的目的是让其执行任务的,父进程只有知道了子进程的PID才能很好的对该子进程指派任务。 为什么fork函数有两个返回值?父进程调用fork函数后,为了创建子进程,fork函数内部将会进行一系列操作,包括创建子进程的进程控制块、创建子进程的进程地址空间、创建子进程对应的页表等等。子进程创建完毕后,操作系统还需要将子进程的进

Linux内存管理深度解析

因为物理内存是多个进程所有的,每个进程都有一个用户空间。如果采用直接映射的话,对应的物理地址是会冲突的。其用户空间的逻辑地址大小都为3G,所以存在逻辑地址相同,但是对应的物理地址不同。需要通过页表来转化,一个进程会对应一个页表。3、如何将虚拟地址映射到物理内存:虚拟地址通过页表:将虚拟地址:转化为物理地址,每个进程都对应着一个页表,::内核只有一个页表。:虚拟空间和物理内存都按照4k来分页,一个虚拟空间中的页和物理内存中页是一一对应的。页表映射:如上图所

Linux内核socket底层解析

本文在上文基础上进一步全面分析socket底层的相关实现。一、socket与inode:socket在Linux中对应的文件系统叫Sockfs,每创建一个socket,就在sockfs中创建了一个特殊的文件,同时创建了sockfs文件系统中的inode,该inode唯一标识当前socket的通信。如下图所示,左侧窗口使用nc工具创建一个TCP连接;右侧找到该进程id(3384),通过查看该进程下的描述符,可以看到”3->socket:[86851]”,socket表示这是一个soc

深入解析Linux虚拟文件系统原理

在unix的世界里,有一句经典的话:一切对象皆是文件。这句话的含义是,可以将unix操作系统中的所有对象都视为文件,并使用文件操作接口来处理它们。linux作为一个类unix操作系统,也致力于实现这一理念。虚拟文件系统概述:为了实现“一切对象皆是文件”的理念,Linux内核引入了一个中间层:虚拟文件系统。如果你熟悉面向对象编程语言,你可能不陌生于“接口”这个概念。虚拟文件系统类似于面向对象中的接口,定义了一套标准的接口规范。开发者只需实现这套接口,就能够通过文件操作接口来操作对象。如下图所

单片机模拟Linux自动初始化揭秘

通常我们写程序都是按照这个套路,一个函数一个函数按照顺序逻辑一个一个的执行下去。如果逻辑非常复杂,涉及的模块比较多,那么这种顺序执行的代码就会比较臃肿,各模块耦合非常紧密。Linuxkernel中,有各种外设驱动,想按照一个顺序逻辑执行下去,几乎是不可能的。而kenrel代码能有这么大的代码量,大而不乱,把各层次,各模块有效的分离,而大量的代码又有逻辑的组织在一起,和这个initcall有至关重要的作用。通过模仿这种方式,最后把图片中main函数代码清空,分离这种逻辑,又实现同样的

Linux中getppid的妙用解析

getppid()是一个linux系统中的系统调用,它的作用是获取当前进程的父进程id在Linux系统中,每个进程都有一个指向其父进程的指针。当一个新的进程被创建时,它的父进程ID会被设置为创建该进程的进程的ID。通过getppid()函数,我们可以获取当前进程的父进程ID,从而了解当前进程是由哪个进程创建的。这在调试程序、分析进程关系以及进行系统监控等方面非常有用。

Linux线程与进程的深度解析

关于进程和线程,在linux中是非常核心的概念。然而,很多人对它们之间的联系和区别并不清楚。在网上对进程和线程的讨论中,大多数集中在它们之间的差异。但实际上,在Linux系统中,进程和线程的相似之处要远远多于它们的不同之处。在Linux环境下,线程甚至被称为轻量级进程。今天,我将从Linux内核实现的角度,深入比较进程和线程。一、线程的创建方式:以Redis6.0以上的版本为例,它开始支持使用多线程提供核心服务。一旦Redis主线程启动,就会调用initThreadedIO函数来创建

系统调用机制深度解析

因为CPU给的权限管理细度不够,比如IntelCPU中Ring2和Ring3在操作系统里安全情况没有区别,Ring1下的系统权限又需要经常调用Ring0特权指令,频繁切换特权级成本过高,操作系统不如将Ring2合并到Ring3,将Ring1划入Ring0特权级另一方面不是每种处理器都像x86一样支持4个权限级别,有些处理器可能只支持2个级别,更少的特权级别,便于移植其他处理器架构上我们再来看下linux的体系架构图:我们可以发现Linux系统从整体上看,被划分为用户态和内核态:内

目录[+]