随笔分类 -  Linux

1 2 下一页

Linux——应用到内核——1.文件
摘要:1. 什么是文件 Linux管理的一切对象都可以视为文件,所以是否是文件和该对象的固有特性无关,由Linux决定,当Linux将其视为文件管理,则称其为文件。 Linux对被视为文件的对象,利用VFS管理,对外提供统一访问接口,用户通过文件描述符访问对象。 2. 内核对文件的管理 2.1 文件会话管 阅读全文

posted @ 2022-07-28 17:15 开心种树 阅读(123) 评论(0) 推荐(0) 编辑

IPC——基于STREAMS的管道
摘要:1. 概述 基于 STREAMS 的管道有三个特点: 全双工 可以传递文件描述符 可以用文件命名 2. socketpair #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socketpair(int domai 阅读全文

posted @ 2022-04-06 17:42 开心种树 阅读(72) 评论(0) 推荐(0) 编辑

ramfs
摘要:initramfs的作用 1. 作为启动跳板 kernel挂载initramfs,运行init程序,该程序会探测硬件,加载驱动,最后挂载真正的文件系统,执行文件系统上的init程序,进而切换到用户空间, 真正的文件系统挂载后,initramfs使命完成,释放其占用空间。 2. 作为最终文件系统 ra 阅读全文

posted @ 2022-03-07 09:46 开心种树 阅读(2000) 评论(0) 推荐(0) 编辑

kernel——module
摘要:模块机制让kernel有伸缩性,既保有宏内核的高效,又有一定微内核的稳定性。 1. 单个模块 1.1 模块的编译 1.1.1 源码树内编译 在源码树内添加模块 linux-5.16.2# touch drivers/char/hello.c #include <linux/init.h> #incl 阅读全文

posted @ 2022-02-21 23:23 开心种树 阅读(469) 评论(0) 推荐(0) 编辑

v4l2
摘要:介绍 v4l2 是 用户 从设备获取 音视频数据的方法。 用户通过 v4l2 可以知道 设备支持 哪些操作 和 支持 哪些数据格式。 通常使用 内存映射,传输数据。 用户预先建立多个内存映射,将空内存输队,等待kernel将数据填充到空内存块,装有数据的内存块出队,用户操作数据。 操作逻辑 设置设备 阅读全文

posted @ 2022-02-15 17:06 开心种树 阅读(1281) 评论(0) 推荐(0) 编辑

Linux系统编程——同步——读写锁
摘要:1. 读写锁的定义 write 和 readers: 当一个进程获得读锁时,其他进程可以获得读锁,而不能获得写锁 当一个进程获得写锁时,其他进程不能获得任何锁 因为当数据正在被写时,数据是脏的,所以读共享,写独占 2. api 2.1 静态初始化 读写锁类型是 pthread_rwlock_t,使用 阅读全文

posted @ 2021-09-14 22:41 开心种树 阅读(79) 评论(0) 推荐(0) 编辑

linux系统编程——同步——互斥锁和条件变量
摘要:1. 互斥锁 互斥锁和条件变量 能用于 线程同步 如果 互斥锁 和 条件变量 存放在 共享内存中,还能 实现 进程同步 1.1 初始化互斥锁 int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr 阅读全文

posted @ 2021-09-03 00:01 开心种树 阅读(168) 评论(0) 推荐(0) 编辑

linux系统编程——IPC——管道
摘要:1. 使用管道需要注意 管道提供单向数据流,fd[0]读,fd[1]写 创建全双工IPC管道的方法是 socketpair(). 写管道数据大小小于 PIPE_BUF 才保证原子性 管道和 FIFO支持 O_NONBLOCK ,使用 fcntl 设置 写一个没有读打开的管道,内核发送 SIGPIPE 阅读全文

posted @ 2021-09-01 22:14 开心种树 阅读(108) 评论(0) 推荐(0) 编辑

linux系统编程——编程杂项——命令行参数
摘要:1. 规范 根据规范,我们使用 - 表示 option,option后面可以加关联值arg wc -l 为了遵守该规则,linux提供了getopt getopt_long函数 2. getopt int getopt(int argc, char * const argv[], const cha 阅读全文

posted @ 2021-08-31 11:40 开心种树 阅读(106) 评论(0) 推荐(0) 编辑

linux系统编程——内存管理
摘要:1. 匿名内存映射 p = mmap(NULL, 512*1024, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 在有些unix系统没有 MAP_ANONYMOUS ,则通过 /dev/zero 实现映射。 1.1 匿名内 阅读全文

posted @ 2021-08-25 22:14 开心种树 阅读(98) 评论(0) 推荐(0) 编辑

linux系统编程——文件IO——补充
摘要:1. 设备节点 设备节点是应用程序与设备驱动交互的特殊文件。 当应用程序在设备节点上进行一个 IO操作(如open close write read)时,内核将请求转发给设备驱动, 设备驱动处理IO操作,并向用户返回结果。 设备节点提供设备抽象,使应用程序不必了解特定设备或特殊接口。 设备节点是un 阅读全文

posted @ 2021-08-25 21:29 开心种树 阅读(93) 评论(0) 推荐(0) 编辑

linux系统编程——线程
摘要:1.线程是什么? 1.1 线程和进程 进程:二进制程序的抽象,包括:加载的二进制程序,虚拟内存,内核资源(如打开的文件),关联用户等 线程:进程内的执行单元,包括:虚拟处理器,堆栈,程序状态。 进程是运行的二进制程序,线程是操作系统调度器可以调度的最小单元 1.2 虚拟内存和虚拟处理器 现代os包括 阅读全文

posted @ 2021-08-25 13:57 开心种树 阅读(135) 评论(0) 推荐(0) 编辑

linux系统编程——进程管理——高级
摘要:1. 进程调度 进程调度是内核子系统,用于将有限的处理器使用时间资源分配给各个进程,决定哪些进程可以运行及运行多久。 调度的目标: *最大化cpu利用率 尽可能提高系统交互响应速度 让每个进程都能被运行 2. 调度分类 协同式:进程自己主动放弃运行,让其他进程运行 抢占式:调度程序决定何时停止一个进 阅读全文

posted @ 2021-08-25 00:42 开心种树 阅读(103) 评论(0) 推荐(0) 编辑

linux系统编程——进程管理——基础
摘要:1. 前言 进程只运行的程序,由汇编语言,数据,资源,状态,虚拟计算机组成。 unix将运行程序分为 创建进程fork,加载二进制exec 1. exec 将二进制程序加载到内存,并开始新程序的执行。 一次成功的exec 会对进程有如下改变: 改变地址空间和进程映像 任何未决信号丢失 进程捕捉信号回 阅读全文

posted @ 2021-08-24 07:34 开心种树 阅读(74) 评论(0) 推荐(0) 编辑

linux系统编程——文件IO——IO调度与性能
摘要:1. 为什么需要IO调度 由于cpu和磁盘的操作周期差 500万倍以上,所以若按照发出IO请求的顺序将IO请求传送给磁盘,效率将非常低, 所以内核会实现IO调度,调整IO请求顺序及时间,以减少磁盘查询次数和大小。 以尽可能降低磁盘访问对系统性能所造成的影响。 2. 磁盘寻址 磁盘虽然使用多级寻址,但 阅读全文

posted @ 2021-08-24 00:49 开心种树 阅读(174) 评论(0) 推荐(0) 编辑

linux系统编程——文件IO——给内核提供建议
摘要:1. 什么是提供建议 通过 madvise() ,进程可以给内核提供建议,以提高文件IO性能。 2. 对映射用法提供建议 int madvise(void *addr, size_t len , int advice); @len : 若为0,则建议会应用到addr开始的整个映射。 @advice: 阅读全文

posted @ 2021-08-24 00:06 开心种树 阅读(231) 评论(0) 推荐(0) 编辑

linux系统编程——文件IO——文件映射
摘要:1. 什么是文件映射 将文件加载到页缓存,并将页缓存映射到用户虚拟空间,让应用程序直接访问页缓存。 2. api void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap( 阅读全文

posted @ 2021-08-23 23:29 开心种树 阅读(309) 评论(0) 推荐(0) 编辑

linux系统编程——文件IO——事件轮询接口
摘要:1. 为什么需要epoll select和poll的特点是:用户给内核一张 需要查看的文件描述符表,内核必须处理表中的每一个文件描述符,当这个表变大时,程序性能降低。 epoll将事件监视器的注册和事件监视工作分离,以避开这个问题。 2. api // @size : 用于提示内核要监控的文件描述符 阅读全文

posted @ 2021-08-23 10:26 开心种树 阅读(103) 评论(0) 推荐(0) 编辑

linux系统编程——文件IO——分散聚集IO
摘要:1. 为什么需要向量IO 性能: 比较于线性IO,向量IO除了可以减少系统调用次数,还可以经内部优化提供性能改善 原子性: 进程可以单次向量IO,不会有与另一个进程操作交叉在一起的风险。 2. 使用说明 ssize_t readv(int fd, const struct iovec *iov, i 阅读全文

posted @ 2021-08-23 09:36 开心种树 阅读(104) 评论(0) 推荐(0) 编辑

linux系统编程——文件IO——并发写的冲突问题
摘要:1. 写文件的互斥 不论是 多线程,多进程,同时写一个文件,在数据写入 页缓存时,都是原子的, 如进程a 写入 "aaaa" 进程b 写入 "bbbb",则内核可能会将 "aaaa" 完整的写入 页缓存,在将完整的 "bbbb" 写入页缓存, 不会出现 "aa" "bbbb" "aa" 的情况。 相 阅读全文

posted @ 2021-08-20 14:00 开心种树 阅读(1169) 评论(1) 推荐(0) 编辑

1 2 下一页
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示