洛卜哒的博客

Hope I can study from bits to qubits.


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

kill -9 not work

发表于 2018-07-05   |   分类于 Linux

kill -9不管用

Linux环境下很多时候需要杀死一个进程,一般kill -9 pid发送SIGKILL信号给该进程即可,该信号的默认行为就是终止进程,而且不可能捕获这个信号,
但是有些时候这个发了这个命令还是没有杀死进程,到底有哪些情况呢?

  1. 没有权限(这个很容易想到);
  2. init进程,root也杀不死;
  3. D状态的进程,这种状态的进程一般正在进行系统调用,如读磁盘IO,对于的内核的TASK_UNINTERRUPTIBLE状态;
  4. 僵尸进程, 在父进程调用waitpid()读取退出状态之前会一直存在,如果父进程忘记调用waitpid()会耗费系统资源。

第十八章+内核开发相关

发表于 2017-06-02   |   分类于 Linux

调试

调试是编程的必备技能,工作两个月来主要就是学习如何调试内核,定位bug。

1. 内核调试

  • Kdump:基于 kexec 的内存转储工具,Core dump不管是用户程序还是内核都会产生。
  • crash工具:内存转储分析工具
    crash和gdb结合,可以方便地进行调试,特别是在开发和调试自己的内核模块时,可以编写gdb脚本简化很多操作。

内核调试的一种方式是利用printk()函数打印信息来调试,该函数提供了不同的日志级别,定义在linux/kern_levels.h

linux提供syslog方便用户空间查看日志信息,通过klogd和syslogd守护进程工作,相关文件:/proc/kmsg、/var/log/messages,通过/etc/syslog.conf可以指定日志输出文件,通过dmesg命令可以查看相关日志。

文件/proc/kallsyms存放了内核镜像中符号与对应地址的映射关系,和System.map类似,但是/proc/kallsyms是当前正在运行的内核的符号,还包含动态加载的模块的符号,但是要注意编译时开启CONFIG_KALLSYMS、CONFIG_KALLSYMS_ALL选项。

拓展阅读:

  • 深入探索 Kdump系列
  • 使用 Crash 工具分析 Linux dump 文件

2. 可移植性

Linux是一个可移植性非常好的操作系统。

Linux支持很多体系结构:List of Linux-supported computer architectures

  • 字长和数据类型
  • 数据对齐
  • 字节顺序
    • 理解字节序
    • 深入理解字节,字节序与字节对齐
  • 内核patch

第十七章 设备与模块

发表于 2017-05-30   |   分类于 Linux

设备与模块

1. 设备类型

在所有类Unix系统中设备也被当做文件对待,称作设备文件。而且成了几类:块设备、字符设备、网络设备、伪设备等。

  • 块设备blkdev:可以寻址、可以随机访问、以块为单位,如硬盘。
  • 字符设备cdev:不可寻址、顺序访问,如键盘、鼠标。
  • 网络设备:通过一个物理适配器和一种特定协议提供对网络的访问。
阅读全文 »

第十六章 页高速缓存和页回写

发表于 2017-05-30   |   分类于 Linux

页高速缓存和页回写

页高速缓存为了减少对磁盘的I/O操作,将磁盘数据缓存在物理内存中,提高访问速度。

  • 访问内存的速度比访问硬盘速度快几个数量级
  • 局部性原理

1. 缓存方法

页高速缓存由内存中的物理页面组成,对应磁盘上的物理块。

写缓存策略:

  • Write-through: write is done synchronously both to the cache and to the backing store.
  • Write-back (also called write-behind): initially, writing is done only to the cache. The write to the backing store is postponed until the cache blocks containing the data are about to be modified/replaced by new content.

缓存回收策略

  • Least Recently Used
  • The Two-List Strategy(LRU/K)

Page replacement algorithm

阅读全文 »

第十五章 进程地址空间

发表于 2017-05-28   |   分类于 Linux

进程地址空间

Linux采用虚拟化内存技术,系统中所有的进程之间以虚拟方式共享内存。通过虚拟化技术一个进程看起来可以拥有整个物理内存,拥有比物理内存大的地址空间,

1. 地址空间

进程地址空间指进程可寻址的虚拟内存组成的虚拟地址空间。每个进程都有一个32位或64位的Flat 地址空间,flat指地址空间范围是一个独立连续的空间。

内存地址是一个给定的值,它要在地址空间范围内,一个进程的可寻址空间为4G(32位机器),但是进程只能访问有效的内存区域内的内存地址,一个进程的地址空间被分成了各种内存区域,如代码段、数据段、堆栈段等。
Region-based memory management

阅读全文 »

第十四章 块I/O层

发表于 2017-05-28   |   分类于 Linux

块I/O层

系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的硬件设备称为块设备,这些固定大小的数据片就称作块,硬盘是最常见的块设备。

如果一个硬件设备是以字符流(顺序访问)的方式被访问,就归于字符设备;如果一个设备是随机访问的,它就属于块设备。

1.块设备

块设备中最小可寻址单元是扇区,扇区的大小是设备的物理属性。

块是文件系统的一种抽象,物理磁盘寻址按照扇区进行,但内核执行的所有磁盘操作是按照块进行。因为扇区是设备的最小可寻址单元,所以块不能比扇区还小,只能数倍于扇区。内核要求块的大小是2的幂,不能超过一个页的大小。所以通常块大小为512字节、1KB、4KB,即扇区:块=1:N。

扇区称硬扇区或设备块;块有时称文件块或I/O块。

扩展阅读:Device file

阅读全文 »

第十三章 虚拟文件系统

发表于 2017-05-21   |   分类于 Linux

1. 虚拟文件系统VFS

虚拟文件系统是Linux内核为支持各种文件系统,在用户进程和文件系统实现之间引入的一个软件抽象层——Virtual File System,仅存在于内存中。

“一切皆文件”是Unix/Linux的设计哲学之一,Linux将普通文件、目录、字符设备、块设备、套接字等都看做文件,主要是他们的操作是一套统一的接口——知乎相关问题:如何理解「In UNIX, everything is a file」?

阅读全文 »

第十二章 内存管理

发表于 2017-05-21   |   分类于 Linux

内存管理

1. 内核如何管理内存

1.1 页

内核把物理页作为内存管理的基本单位,MMU通常以页(page)为单位进行处理,页表页表就是这个意思

内核用struct page结构代表系统中的每个物理页:linux/mm_types.h

1
2
3
4
5
6
7
8
9
10
struct page {
unsigned long flags;
atomic_t _count;
atomic_t mapcount;
unsigned long private;
struct address_space *mapping;
pgoff_t index;
struct list_head lru;
void *virtual;
};
  • flags域用来存放页的状态,定义在
阅读全文 »

第十一章 定时器和时间管理

发表于 2017-05-20   |   分类于 Linux

定时器和时间管理

内核中大量函数是基于时间驱动的,如定期执行的函数,定时执行的函数。系统定时器是一种可编程硬件芯片,它能以固定频率产生中断——定时中断。

1. 内核中的时间

内核必须在硬件帮助下才能计算和管理时间,硬件为内核提供一个系统定时器用来计算流逝的时间,系统定时器以某种频率自行触发时钟中断,该频率可以编程预定,称作节拍率(tick rate),发生时钟中断时内核会调用特殊的中断处理程序。

节拍率可以编程控制,那么两次连续时钟中断的间隔也可以得到,这个间隔称为节拍(tick),等于1/(tick rate)秒。

内核靠这种已知时钟中断间隔计算实际时间和系统运行时间。

阅读全文 »

第十章 内核同步方法

发表于 2017-05-10   |   分类于 Linux

内核同步方法

Linux内核提供了一组相当完备调度同步方法。

1. 原子操作

原子操作可以保证指令以原子方式执行——执行过程不被打断。

内核提供了两组原子操作接口:一组针对整数进行操作,一组针对单独的位进行操作。

阅读全文 »
1234
洛卜哒

洛卜哒

大约,孔乙己的确死了!

40 日志
11 分类
11 标签
GitHub
  • Github
  • Project Euler
© 2023 洛卜哒
由 Hexo 强力驱动
主题 - NexT.Muse