<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[WaterWin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/WaterWin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; WaterWin]]></copyright><item><title><![CDATA[OpenHarmony地图]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/125243502</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/125243502</guid><author>WaterWin</author><pubDate>Sun, 12 Jun 2022 11:33:28 +0800</pubDate><description><![CDATA[沟通地图]]></description><category></category></item><item><title><![CDATA[[OpenHarmony]下载与编译]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/125198465</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/125198465</guid><author>WaterWin</author><pubDate>Thu, 09 Jun 2022 10:28:26 +0800</pubDate><description><![CDATA[OpenHarmony代码下载与编译]]></description><category></category></item><item><title><![CDATA[pthread的编译问题]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/85049431</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/85049431</guid><author>WaterWin</author><pubDate>Mon, 17 Dec 2018 15:00:09 +0800</pubDate><description><![CDATA[写了一个多线程的程序，说一下怎么去编译这样的程序。

例如文件名叫做plock.c，现在编译需要得到其可执行文件plock。我们执行下面命令：


gcc plock.c -o plock -lpthread

如果需要将其写成Makefile的形式，可以采用下面的这种实例：第三行这个位置的命令-lpthread这个的位置放在前面的时候好像是会出现问题的，这里放置在后面就不会出现什么问题。


a...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章truncate]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79791726</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79791726</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:37:17 +0800</pubDate><description><![CDATA[    这篇文章讲f2fs文件系统的截断，在调用这个函数之前会设置inode的i_size，这个函数完成在文件中i_size之后的数据的删除。其起始的函数是f2fs_truncate。

    f2fs_truncate：检查inode的mode，如果不是REG或者是目录或者是LNK，那么直接返回。然后再调用f2fs_may_inline_data检查文件是否可以以内联的形式存放，如果不行，调用...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章——缓存summary写入磁盘的问题]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79891454</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79891454</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:37:00 +0800</pubDate><description><![CDATA[    这篇文章讲述一下f2fs文件系统中缓存在内存中的f2fs_summary写入磁盘的问题，这个涉及到f2fs_summary写入磁盘的时机、位置以及curseg在do_checkpoint中的写入问题和mount的时候的恢复curseg的问题。

    首先，对于curseg_info中的f2fs_summary_block有两种方式同步到page cache中。一种是在curseg_in...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章——sit/nat_version_bitmap]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79901440</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79901440</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:36:49 +0800</pubDate><description><![CDATA[    f2fs为了防止宕机对元数据造成不可恢复的损害，所以sit/nat这种元数据有着两个副本，但是这两个副本只有一个是表示最新的数据，f2fs通过保存在cp pack中的sit/nat version bitmap来指示哪个才是最新的。本文将讲述sit和nat两个副本的放置情况，以及sit/nat version bitmap在cp pack中的放置情况，最后将描述sit/nat更新时的ver...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章——do_checkpoint关于data summary的两种写入方式]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79943236</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79943236</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:36:38 +0800</pubDate><description><![CDATA[    为了保存current segment的summary信息，f2fs在do_checkpoint的时候会调用会调用write_data_summaries和write_node_summaries将其sumamries信息写到page cache中然后随后同步到磁盘中，其中write_node_summaries也是只有在umount和fastboot的情况下才会调用。我们可以看到writ...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章——cp pack的组成]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79910495</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79910495</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:36:25 +0800</pubDate><description><![CDATA[    f2fs将分区分为super block、cp pack、sit、nat、ssa、main area四个区域，除了cp pack外，其他的区域的组成都比较简单，基本只有一种数据结构，只有cp pack由于承载了check point的功能，所以其组成比较复杂，这篇文章就cp pack的组成来详细讲述。

    cp pack是由f2fs_checkpoint、sit_version_bi...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fill_super（四）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79812974</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79812974</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:36:06 +0800</pubDate><description><![CDATA[    这篇文章将讲述f2fs的node的管理结构f2fs_nm_info的构建和恢复。   

    build_node_manager：首先分配f2fs_nm_info的空间，然后调用init_node_manager初始化f2fs_nm_info并分配一些位图的空间。最后调用build_free_nids读取一定page中的f2fs_nat_entry对free_nid进行初始化，然后根...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fill_super（三）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79812425</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79812425</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:35:57 +0800</pubDate><description><![CDATA[    这篇文章完成f2fs的segment管理结构f2fs_sm_info的创建和恢复。    

    build_segment_manager：首先分配容纳f2fs_sm_info的空间，然后用f2fs_super_block中的数据对f2fs_sm_info的一些关于segment数量的信息进行初始化。接着初始化其中的三个链表discard_list、wait_list、sit_ent...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fill_super（二）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79807635</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79807635</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:35:47 +0800</pubDate><description><![CDATA[    sb_set_blocksize通过函数set_blocksize对size进行检查并设置块设备的块大小。然后将super block的s_blocksize，s_blocksize_bits设置F2FS_BLKSIZE和F2FS_BLKSIZE相应的bit位数。


int sb_set_blocksize(struct super_block *sb, int size)
{
	if ...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fill_super（一）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79807560</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79807560</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:35:30 +0800</pubDate><description><![CDATA[    这个系列文章将讲述文件系统的安装过程，以函数f2fs_fill_super为起点。

    f2fs_fill_super：通过调用sb_set_blocksize来检查和设置super_block的块大小字段和快设备的块大小。然后调用read_raw_super_block来对物理设备上的f2fs_super_block进行读取。接下来就可以对f2fs_sb_info的某些字段进行初始...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fsck（五）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79755749</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79755749</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:33:43 +0800</pubDate><description><![CDATA[    fsck_verify通过前面的检查结果来修正元数据。

    首先是对nid的检查情况进行查看，f2fs_fsck中的nat_area_bitmap从开始的读取f2fs_nat_block中的所有的f2fs_nat_entry来记录所有有效的nid，但是在遍历的过程中在调用sanity_check_nid的时候已经将所有正常的nid都给clear掉了，所以在检查这个位图的时候，如果发现...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fsck（四）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79755579</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79755579</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:33:34 +0800</pubDate><description><![CDATA[    补充一下之前略过的关于direct node、indirect node、dindirect node的检查。

    fsck_chk_didnode_blk，对NIDS_PER_BLOCK个nid进行遍历，如果nid ==0，就直接跳过，nid!=0的话，就调用以TYPE_INDIRECT_NODE的标志调用fsck_chk_node_blk。如果成功就直接将i_block++。否则...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fsck（三）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79753834</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79753834</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:33:20 +0800</pubDate><description><![CDATA[    fsck_chk_inode_blk接下来就是对一个文件进行处理了，内容比较丰富。首先对inode对应的地址在f2fs_fsck的main_area_bitmap中有没有置位，如果没有置位，也就是检查到了一个新的inode，将f2fs_fsck中的check_result的valid_inode_cnt++，这里需要检查的原因是，可能有硬链接这些在之前就已经将main_area_bitma...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fsck（二）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79753717</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79753717</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:33:06 +0800</pubDate><description><![CDATA[    fsck_chk_node_blk完成对所有类型的node进行检查。

    node类型有：TYPE_INODE，TYPE_DIRECT_NODE，TYPE_INDIRECT_NODE，TYPE_DOUBLE_INDIRECT_NODE，TYPE_XATTR。但是调用这个函数不会是TYPE_XATTR。

    文件类型有：F2FS_FT_UNKNOWN、F2FS_FT_REG_FI...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章fsck（一）]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79743792</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79743792</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:32:51 +0800</pubDate><description><![CDATA[ 

    do_fsck首先调用fsck_init对f2fs_fsxk的一些字段进行初始化。

    fsck_init首先对f2fs_fsck的nr_main_blks，main_area_bitmap_sz和main_area_bitmap进行一个初始化，nr_main_blks初始化为f2fs文件系统的main area的block的数量，然后是main_area_bitmap_sz初...]]></description><category></category></item><item><title><![CDATA[f2fs系列文章gc]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/79801790</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/79801790</guid><author>WaterWin</author><pubDate>Mon, 26 Nov 2018 21:32:30 +0800</pubDate><description><![CDATA[    这篇文章将讲述f2fs的gc，其主要的步骤应该是分为两步，首先select一个合适的section，然后将section中的数据全部迁移。

 

    f2fs_gc：这个函数主要有两个函数调用gc线程和f2fs_balance_fs。首先检查super_block是否设置MS_ACTIVE,也就是super_block处于活动状态（目前不知道什么个状态），如果设置了就不做gc了。然后...]]></description><category></category></item><item><title><![CDATA[算法导论——红黑树]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/84032052</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/84032052</guid><author>WaterWin</author><pubDate>Thu, 15 Nov 2018 20:23:26 +0800</pubDate><description><![CDATA[红黑树是二叉搜索树的一种特例，它对每个节点增加了一个颜色的属性，通过增加以下的条件使得这颗二叉树更加平衡：
1.每个节点或是红色的，或是黑色的。
2.根节点是黑色的。
3.每个叶节点是黑色的。
4.如果一个节点是红色的，那么它的两个子节点都是黑色的。
5.对每个节点，从该节点到其所有后代节点的简单路径上，均包含相同数目的黑色节点。
红黑树的插入和删除如果按照二叉树的处理，那么它的性质可能被破坏，那...]]></description><category></category></item><item><title><![CDATA[算法导论——二叉搜索树]]></title><link>https://blog.youkuaiyun.com/WaterWin/article/details/84025941</link><guid>https://blog.youkuaiyun.com/WaterWin/article/details/84025941</guid><author>WaterWin</author><pubDate>Tue, 13 Nov 2018 16:18:10 +0800</pubDate><description><![CDATA[二叉搜索树是以一个二叉树来组织的，树的每个节点都是由键值value，父节点parent，左子节点left_child，右子节点right_child组成的，而且二叉搜索树的节点间满足以下的关系：假设x是二叉搜索树中的一个节点，如果y是x左子树中的一个节点，那么y的value是比x的value小；如果y是x右子树中的一个节点，那么y的value不比x的value小。

二叉树支持的操作有：遍历、查找...]]></description><category></category></item></channel></rss>