操作系统
鹰击丶长空
无名之辈
展开
-
【APUE】linux信号机制
【信号】软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信...原创 2019-04-23 20:01:14 · 171 阅读 · 0 评论 -
linux-启动过程-systemd
操作系统的启动分为两个过程:boot(引导)和startup(启动)。boot阶段开始于打开电源开关,结束于内核初始化完成和systemd进程成功。启动阶段接管了剩余工作,直到操作系统进入可操作状态。因此,linux系统的启动过程如下:POST(BIOS上电自检)->GRUB(引导装载程序)->kernel init(内核初始化)->startsystemd(启动s...原创 2019-07-05 00:09:56 · 899 阅读 · 0 评论 -
linux-socket
socket系统调用socket函数族在系统调用时,同样遵循我上篇博客的 用户态->内核态,但是,我在寻找sys_socket定义时,只有函数声明asmlinkage long sys_socket(int, int, int);那么它的实现在哪儿呢?这里就需要有技巧了!这样实现都在net/socket.c文件。以socket函数为例,SYSCALL_DEFINE3(so...原创 2019-06-24 23:17:55 · 185 阅读 · 0 评论 -
linux-IPC-ShareMemory
共享内存(ShareMemory)共享内存允许两个或多个进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,因此,这是最快的一种IPC方式。使用共享内存的关键点在于:多个进程同步访问一个给定的存储区,若服务器进程正在把数据放入共享内存区,则它在做完这一操作之间,客户进程不能取这些数据。可以使用信号量、记录锁或者互斥量来完成同步过程。数据结构#include &...原创 2019-07-03 00:18:34 · 171 阅读 · 0 评论 -
linux-IPC-Semaphore
信号量semaphore信号量是一个计数器,用于为多个进程提供对共享数据对象的访问。常用的信号量形式为二元信号量(Binary semaphore)。它控制单个资源,初始值为1。但是,一般而言,信号量的初值可以是任意正数,该值表明有多少个共享资源单位可供共享应用。数据结构#include <sem.h>struct ipc_perm{ __kernel_key_t...原创 2019-07-02 22:17:12 · 257 阅读 · 0 评论 -
linux-IPC -PIPE
进程间通信 (InterProcess Communication,IPC)原因:由于不同进程地址空间也不同,A进程无法访问B进程的地址空间。任何一个进程的全局变量也无法被其他进程所见,因此,进程间通信必须通过内核。在内核中开辟一块缓冲区,A进程把数据从用户空间拷贝到内核缓冲区,B进程从内核缓冲区把数据读走,这便是IPC。管道(PIPE)1.PIPE是UNIX系统IPC最古老的形...原创 2019-06-26 23:41:38 · 180 阅读 · 0 评论 -
linux-系统调用过程
调用过程:用户空间->内核空间INT 0x80(封装在C库函数中) -->system_call(系统调用处理程序)-->系统调用服务例程 -->内核程序系统调用时通过软中断指令INT 0x80实现的,这条指令会让系统跳转到一个预先设置好的内核地址,指向系统调用处理程序system_call。系统调用服务例程是对一个具体的系统调用的内核实现函数。执行任何系统...原创 2019-06-23 23:15:46 · 789 阅读 · 0 评论 -
linux-IPC-消息队列
消息队列消息队列是消息的链接表,存储在内核中,由消息队列标志符标识。每个消息都包含一个正的长整型类型的字段、一个非负的长度以及实际的数据字节数,这些都在消息添加到队列时,传送给msgsnd。msgrcv用于在队列中取消息,消息并不一定需要先进先出,可以根据消息类型字段来取。特点1.生命周期随内核,消息队列会一直存在,需要调用接口显式删除或使用命令删除2.消息队列可以双向通信...原创 2019-07-01 22:10:54 · 210 阅读 · 0 评论 -
linux-UNIX socket
UNIX域套接字域套接字作为进程间通信的一种手段,值得我们研究一下。域套接字实现本地进程间通信,同样有服务端和客户端之分。一个进程作为客户端,另一个进程作为服务端。这个和TCP socket类似,但是不一样。域套接字不经过底层网络。数据结构使用的是struct sockaddr_un。对于这个结构,重点便是填充sun_family和sun_path,sun_path是文件路径。调用的so...原创 2019-06-25 20:05:45 · 1044 阅读 · 0 评论 -
linux 内存分配
进程内存分配:每个进程所分配的内存由很多“段”组成:(地址递增方向)1.文本段:包含了进程运行的程序机器语言指令2.初始化数据段:包含了显式初始化的全局变量和静态变量3.未初始化数据段:包含了未进行显式初始化的全局变量和静态变量4.堆:向上增长5.栈:向下增长虚拟内存管理1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址2.虚拟地址可以通...原创 2019-06-15 10:22:37 · 267 阅读 · 0 评论 -
【APUE】进程一瞥
基本概念程序:存放在磁盘文件中的可执行文件进程:程序执行的实例(process)Cmd: ps ,top进程ID:每个进程都有一个非负整数标识的唯一进程ID0是调度进程,1是init进程,(大多数UNIX系统)2是页守护进程page daemon/*除了进程ID,进程还可以用下面的函数返回其他的标志符*/#include <unistd.h>pid_t...原创 2019-04-19 20:42:51 · 148 阅读 · 0 评论 -
linux-内存寻址-内存地址
内存地址1.逻辑地址包含在机器语言指令中用来指定一个操作数或一条指令的地址。每个逻辑地址都由一个段(segment)和偏移量(offset)组成,偏移量指明了从段开始的地方到实际地址之间的距离。2.线性地址是一个32位无符号整数,可以用来表示4GB的地址,也就是高达4294967296个内存单元。线性地址通常用十六进制数字表示,范围从0x00000000到0xffffffff。...原创 2019-07-10 23:38:17 · 332 阅读 · 0 评论