
操作系统
文章平均质量分 88
专栏简介
BLSxiaopanlaile
这个作者很懒,什么都没留下…
展开
-
Linux内核之C语言实现面向对象机制
前言 我们都知道C语言是一门面向过程的编程语言,但你如果认为C语言只能用来编写面向过程式的程序,那只能说你对C语言,或者说对Linux不是非常了解。 As we all konw,Linux操作系统大部分都是用C语言写的,而在编写linux中,大佬们优美的应用C语言写出了OO(面向对象)的操作系统。 关于Linux内核中利用的OO思想的具体体现,网上有很多好的文章,我在这就不班门弄斧了...原创 2019-10-09 20:40:15 · 1557 阅读 · 4 评论 -
linux内核之中断
前言这几天看了LDD3中的中断管理一章节,最终的效果是:基本以前知道的现在知道,以前不知道的现在还是不太清楚。于是又花了几天时间查了一些资料,现在稍微懂那么点点了。 但是还是不太系统,以后《真象还原》来了,还得实践以加深理解。现 把这些资料记录在此,方便以后查看。你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章...原创 2020-01-31 12:30:40 · 1412 阅读 · 0 评论 -
Linux内核之浅析内存管理(二)
前言在学习linux驱动,过程中遇到一些linux内存管理上的东西,在此记录,当做回顾思考,也算作笔记以备查看,_。一、linux内存虚拟地址布局 首先需要了解的就是在32位的linux的内存管理中,它把4G的虚拟地址空间分为了3G的用户地址空间和1G的内核地址空间。如下图所示。下面来关注这样几个问题:Q1:每个进程用户空间的虚拟地址空间(0-3G)是一样的,...原创 2020-01-31 12:32:32 · 172 阅读 · 0 评论 -
linux内核之设备驱动模型
linux内核之设备驱动模型前言一、设备模型的基石---kobject子系统二、设备模型的总框架---总线、设备和驱动模型三、有关驱动的虚拟内存文件系统---Sysfs系统前言七七八八,磨磨蹭蹭,终于大体上是把LDD3弄完了(大的方面),这里还剩一部分设备驱动部分,喝杯枸杞茶,拍拍我这略显懒散的脸,把这部分记录完。这篇博客打算写一下几个部分设备模型的基石—kobject子系统设备模型的...原创 2020-02-08 20:54:22 · 1559 阅读 · 0 评论 -
Linux内核学习之C语言中用结构体成员找结构体
前言啊,看不懂题目什么意思吗?来,老夫给你分解一下Linux内核学习 之 C语言中 以结构体成员找结构体。重点就是加粗的部分。啊,什么,还是不太理解。说的再详细点:给你一个结构体成员的地址,让你找这个结构体的首地址。’举个栗子:typedef struct node{ double x; int d; char c;}Node;给你一个Node型的结...原创 2019-10-11 19:34:05 · 789 阅读 · 2 评论 -
Linux内核之浅析内存管理(一)
前言在学习linux驱动,过程中遇到一些linux内存管理上的东西,在此记录,当做回顾思考,也算作笔记以备查看,_。一、linux内存虚拟地址布局 首先需要了解的就是在32位的linux的内存管理中,它把4G的虚拟地址空间分为了3G的用户地址空间和1G的内核地址空间。如下图所示。下面来关注这样几个问题:Q1:每个进程用户空间的虚拟地址空间(0-3G)是一样的,...原创 2020-01-31 12:48:44 · 421 阅读 · 1 评论 -
内存管理再探究
内存管理再探究前言前言原创 2021-03-21 18:49:24 · 381 阅读 · 0 评论 -
利用无名管道实现简单并行计算
名称:利用无名管道实现简单并行计算 说明:本程序利用无名管道进行进程间通信,达到多进程同时计算的目的。 基本算法是:首先在主进程里创建了一定数量的子进程,然后主进程通过无名管道向子进程传递要计算的数据,子进程计算后,通过无名管道将计算的结果(此处是求和)返回给主进程,主进程进行汇总。#include <stdio.h>#include <unistd.h>#include <sys/原创 2017-09-10 23:19:30 · 301 阅读 · 0 评论 -
利用有名管道实现进程间通信(聊天小程序)
/* 名称:利用有名管道实现进程间通信(聊天小程序) 说明:此程序,是有名管道实现进程间的相互通信。 关于有名管道,需要说的是,它是一个特殊的文件,因为它的名字会保存在文件系统中(inode节点,这也是其为什么能在无关进程间通信的原因吧)但是,它的内容并不是在内存中(无名管道的名字和内容都是放在内存中的)。 关于管道的建立,有一点要说明的就是一般来说,我们原创 2017-09-16 22:44:00 · 3679 阅读 · 0 评论 -
实验检测编译过程中的链接作用
/* 名称:实验检测编译过程中的链接作用 说明:以前一直不太了解编译过程中链接是到底干嘛的(其具体的作用是什么),只浅浅的了解到这个阶段就是将各个目标文件连接在一起,至于为什么要连接,怎么连接,不是很清楚。 最近在复习操作系统的时候,了解到,链接阶段的一个功能就是将各个目标文件中的逻辑地址转化为最终可执行文件的的统一的逻辑地址。 这么说吧,每一个源文件生成单独原创 2017-09-15 21:14:30 · 558 阅读 · 0 评论 -
有名信号量实现读者-写者问题(公平读写)
/* 名称:有名信号量实现读者-写着问题(公平读写) 说明:本实验实现的是公平算法的读者写者问题。即读者写者在访问文件之前都得排队等待。 基本的实现:对于读者和写者在P、V操作上基本相同,都是先等待queue信号量,然后再等待rw。 稍微不同的是由于读者可以同时访问文件,若有读者已经在访问文件,其他的读者不用在申请rw信号量。*/读者:#include <s原创 2017-08-28 22:59:26 · 3147 阅读 · 0 评论 -
有名信号量实现读者-写着问题(写者优先)
/* 名称:有名信号量实现读者-写着问题(写者优先) 说明:本实验实现的是写者优先的读者写者问题。和读者优先类似,写者优先是当读者写者在同时申请访问文件时(如果有写者正在写入文件),那么其他写者能更容易的访问到文件(因为“它不用排队”,即在本实验中不用等待queue信号量)。 打个不确切的比方,就像是“读者”和“写者”两个人去买票,本应该老老实实都该排队。但如果“写者”原创 2017-08-27 20:50:27 · 1331 阅读 · 0 评论 -
无名信号量实现哲学家问题
/* 名称:无名信号量实现哲学家问题 说明:本实验是利用无名信号量实现哲学家问题。 总体的思路是不让左右相邻的哲学家同时申请同一个筷子,即奇数号哲学家先申请位于其 左边的筷子,然后再申请其右边的筷子;偶数号科学家先申请右边的筷子,然后在申请左边的筷子。以达到同步的目的。 程序整体的流程是:主程序申请了N个无名的信号量,然后把它们映射到共享内存中(因为无原创 2017-08-21 22:53:39 · 307 阅读 · 0 评论 -
有名信号量实现读者-写者问题(读者优先)
/* 名称:有名信号量实现读者-写着问题(读者优先) 说明:本实验实现的是读者优先的读者写者问题,即若有读者正在访问文件,而且还有读者和想要申请访问文件,则对于读者可以直接访问,对于写者必须等待所有的读者访问完毕(包括正在访问的和正在申请访问的读者),没有读者时,才能访问文件进行写入。 基本的算法很简单,就不说了。要提到一点的是,本实验花了好几天时间才弄出来,原因是C掌原创 2017-08-24 23:23:17 · 1503 阅读 · 0 评论 -
有名信号量实现消费者生产者问题
/* 名称:有名信号量实现消费者生产者问题 说明:本实验实现的是进程同步中经典的消费者生产者的问题。在本实验中解决的是生产者消费者在多个缓冲区中涉及的同步和互斥问题。 对于一个缓冲区还是多个缓冲区的问题,其主要区别在于解决方案中是不是该包括互斥部分。 对于一个缓冲区,不需要包括互斥部分,因为只有一个缓冲区,生产者和消费者同步连续运行,不会涉及到原创 2017-08-20 23:15:28 · 569 阅读 · 0 评论 -
无名信号量实现相关进程同步
/* 名称:无名信号量实现相关进程同步 说明:此处使用的是实现相关进程同步的实验程序(改编自教材)。 有几点需要强调下 1.两个进程之间有不同的地址空间(即使是用fork生成的相同的进程,它们中的内容相同但是,但是地址空间是不同的)。虽然使用了posix的的sem_init声明了一个共享的信号量sem ,但是当两个进程执行不同的操作原创 2017-08-20 23:07:12 · 847 阅读 · 0 评论 -
简单线程实验
/* 名称:简单线程实验 说明:线程是轻量级的进程。我们可以通过创建线程来达到较小的开销(比线程来说)。 线程的使用主要几个API函数,在此简单介绍几个:(1).函数定义int pthread_create((pthread_t *thread, pthread_attr_t *attr, void (*start_routine)(void *), voi原创 2017-05-30 17:06:30 · 463 阅读 · 0 评论 -
线程与进程的区别
总结:以前学习线程和进程的时候,对它们之间的区别不是十分的理解。慢慢的学习过程中,慢慢体会到其之间的区别。现从两个方面加以区别:1.使用方面(一般教科书上说的): (1)线程是轻量级的进程。每一个进程都有独立的地址空间,开启一个进程,操作系统必须为其建立一大堆的数据表来维护它的代码段、数据段堆栈端等。而对于线程来说,它与其他线程共享了进程的代码段和一部分数据段(应该是动态的堆),它自己独有的只是原创 2017-05-30 17:32:11 · 244 阅读 · 0 评论 -
简单多线程同步--互斥锁
/* 名称:多线程通信中同步–互斥锁 说明:多线程由于共享一部分数据段,所以当不同的线程对这部分数据进行访问的时候,就需要进行同步。以防出现数据的不一致。就我现在了解,线程中的同步有两种方式,一是这里的互斥锁,二是信号量。互斥锁,通俗说,就是只有当线程拿到这把锁之后才能进行一系列操作(包括对互斥变量的操作)。在这期间其他进程由于没有锁,只能陷入阻塞等待状态。当完成操作后,线程需要原创 2017-05-30 18:25:52 · 710 阅读 · 0 评论