深入分析linux内核源代码

本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友自己参考相关资料。此书出版较早,分析的版本为2.4.16,故出现的一些概念可能跟最新版本内核不同。


此书已经开源,阅读地址 http://www.kerneltravel.net






一、内存管理概述






(一)、虚拟内存实现结构 










(1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址。




(2)交换模块(swap):负责控制内存内容的换入和换出,它通过交换机制,使得在物理内存的页面(RAM 页)中保留有效的页 ,即从主存中淘汰最近没被访问的页,保存近来访问过的页。




(3)核心内存管理模块(core):负责核心内存管理功能,即对页的分配、回收、释放及请页处理等,这些功能将被别的内核子系统(如文件系统)使用。




(4)结构特定的模块:负责给各种硬件平台提供通用接口,这个模块通过执行命令来改变硬件MMU 的虚拟地址映射,并在发生页错误时,提供了公用的方法来通知别的内核子系统。这个模块是实现虚拟内存的物理基础。




(二)、内核空间和用户空间




Linux 简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux 的虚拟地址空间也为0~4G 字节。Linux 内核将这4G 字节的空间分为两部分。将最高的1G 字节(从虚拟地址0xC0000000 到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G 字节(从虚拟地址0x00000000 到0xBFFFFFFF),供各个进程使用,称为“用户空间”。因为每个进程可以通过系统调用进入内核,因此,Linux 内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G 字节的虚拟空间。图 6.3 给出了进程虚拟空间示意图。






Linux 使用两级保护机制:0 级供内核使用,3 级供用户程序使用。从图6.3 中可以看出,每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1G 字节虚拟内核空间则为所有进程以及内核所共享。








(三)、虚拟内存实现机制间的关系










首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时如果发现程序中要用的虚地址没有对应的物理内存时,就发出了请页要求①;如果有空闲的内存可供分配,就请求分配内存②(于是用到了内存的分配和回收),并把正在使用的物理页记录在页缓存中③(使用了缓存机制)。如果没有足够的内存可供分配,那么就调用交换机制,腾出一部分内存④⑤。另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页⑧;交换机制中也要用到交换缓存⑥,并且把物理页内容交换到交换文件中后也要修改页表来映射文件地址⑦。




二、内存分配与释放




在Linux 中,CPU 不能按物理地址来访问存储空间,而必须使用虚拟地址;因此,对于内存页面的管理,通常是先在虚存空间中分配一个虚存区间,然后才根据需要为此区间分配相应的物理页面并建立起映射,也就是说,虚存区间的分配在前,而物理页面的分配在后。




(一)、伙伴算法(Buddy)




Linux 的伙伴算法把所有的空闲页面分为10 个块组,每组中块的大小是2 的幂次方个页面,例如,第0 组中块的大小都为2^0(1 个页面),第1 组中块的大小都为2^1(2 个页面),第9 组中块的大小都为2^9(512 个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。




我们通过一个简单的例子来说明该算法的工作原理。




假设要求分配的块的大小为128 个页面(由多个页面组成的块我们就叫做页面块)。该算法先在块大小为128 个页面的链表中查找,看是否有这样一个空闲块。如果有,就直接分配;如果没有,该算法会查找下一个更大的块,具体地说,就是在块大小256 个页面的链表中查找一个空闲块。如果存在这样的空闲块,内核就把这256 个页面分为两等份,一份分配出去,另一份插入到块大小为128 个页面的链表中。如果在块大小为256 个页面的链表中也没有找到空闲页块,就继续找更大的块,即512 个页面的块。如果存在这样的块,内核就从512 个页面的块中分出128 个页面满足请求,然后从384 个页面中取出256 个页面插入到块大小为256 个页面的链表中。然后把剩余的128 个页面插入到块大小为128 个页面的链表中。如果512 个页面的链表中还没有空闲块,该算法就放弃分配,并发出出错信号。




以上过程的逆过程就是块的释放过程,这也是该算法名字的来由。满足以下条件的两个块称为伙伴:
(1)两个块的大小相同;
(2)两个块的物理地址连续。




伙伴算法把满足以上条件的两个块合并为一个块,该算法是迭代算法,如果合并后的块还可以跟相邻的块进行合并,那么该算法就继续合并。








(二)、Slab 分配机制














可以根据对内存区的使用频率来对它分类。对于预期频繁使用的内存区,可以创建一组特定大小的专用缓冲区进行处理,以避免内碎片的产生。对于较少使用的内存区,可以创建一组通用缓冲区(如Linux 2.0 中所使用的2 的幂次方)来处理,即使这种处理模式产生碎
片,也对整个系统的性能影响不大。




硬件高速缓存的使用,又为尽量减少对伙伴算法的调用提供了另一个理由,因为对伙伴算法的每次调用都会“弄脏”硬件高速缓存,因此,这就增加了对内存的平均访问次数。




Slab 分配模式把对象分组放进缓冲区(尽管英文中使用了Cache 这个词,但实际上指的是内存中的区域,而不是指硬件高速缓存)。因为缓冲区的组织和管理与硬件高速缓存的命中率密切相关,因此,Slab 缓冲区并非由各个对象直接构成,而是由一连串的“大块(Slab)”构成,而每个大块中则包含了若干个同种类型的对象,这些对象或已被分配,或空闲,如图6.10 所示。一般而言,对象分两种,一种是大对象,一种是小对象。所谓小对象,是指在一个页面中可以容纳下好几个对象的那种。例如,一个inode 结构大约占300 多个字节,因此,一个页面中可以容纳8 个以上的inode 结构,因此,inode 结构就为小对象。Linux 内核中把小于512 字节的对象叫做小对象。




实际上,缓冲区就是主存中的一片区域,把这片区域划分为多个块,每块就是一个Slab,每个Slab 由一个或多个页面组成,每个Slab 中存放的就是对象。


qing.blog.sina.com.cn/3789927502/e1e5b44e330045jz.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k0.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k1.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k2.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k3.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k4.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k5.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k6.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k7.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k8.html
qing.blog.sina.com.cn/3789927502/e1e5b44e330045k9.html
mzwlkj0025.blog.sohu.com/276932513.html
blog.sina.com.cn/s/blog_e1e5b44e0101novf.html
mzwlkj0025.blog.sohu.com/276932513.html
zzfkbyyy.blog.163.com/blog/static/22588703220138160132755/
blog.sina.com.cn/s/blog_e1e5b44e0101noyt.html
mzwlkj503.blog.sohu.com/276950715.html
zzfkbyyy.blog.163.com/blog/static/22588703220138162515440/
mzwlkj503.blog.sohu.com/276950715.html
zzfkbyyy.blog.163.com/blog/static/22588703220138162132856/
t.163.com/event/info/eventId/115748367186340540
home.51.com/1978325943/diary/item/10048362.html
mzwlkj503.blog.sohu.com/276950715.html
zzfkbyyy.blog.163.com/blog/static/22588703220138162132856/
home.51.com/1978325943/diary/item/10048363.html
t.163.com/event/info/eventId/4325995711637756069
blog.sina.com.cn/s/blog_e1e5b44e0101nozk.html
home.51.com/1978325943/diary/item/10048364.html
bibitie.com/zhengzhou/erke/x142x14639374.html
zzfkbyyy.blog.163.com/blog/static/225887032201381622733354/
mzwlkj503.blog.sohu.com/276954685.html
event.weibo.com/1890048
mzwlkj503.blog.sohu.com/276954685.html
zzfkbyyy.blog.163.com/blog/static/225887032201381623335495/
mzwlkj503.blog.sohu.com/276956461.html
home.51.com/1978325943/diary/item/10048365.html
home.51.com/1978325943/diary/item/10048366.html
zzfkbyyy.blog.163.com/blog/static/225887032201381624029747/
mzwlkj503.blog.sohu.com/276957205.html
meilishuo.com/group/45209383
t.163.com/event/info/eventId/-2186761505429479152
t.163.com/event/info/eventId/-7933974266839350164
event.weibo.com/1894710
blog.sina.com.cn/s/blog_e1eaf1fe0101bmp4.html
mzwlkj0024.blog.sohu.com/276965857.html
zzzfkb.blog.163.com/blog/static/225886078201381632232961/
event.weibo.com/1894866
blog.sina.com.cn/s/blog_e1eaf1fe0101bmp7.html
mzwlkj0024.blog.sohu.com/276966731.html
zzzfkb.blog.163.com/blog/static/225886078201381632720113/
event.weibo.com/1895128
blog.sina.com.cn/s/blog_e1eaf1fe0101bmpa.html
mzwlkj0024.blog.sohu.com/276967222.html
zzzfkb.blog.163.com/blog/static/225886078201381633026690/
zzzfkb.blog.163.com/blog/static/225886078201381633243349/
mzwlkj0024.blog.sohu.com/276967844.html
blog.sina.com.cn/s/blog_e1eaf1fe0101bmpe.html
meilishuo.com/group/45216225
meilishuo.com/group/45216237
huihui.cn/share/9434415
huihui.cn/share/9434491
blog.renren.com/share/557457906/16392013389
blog.renren.com/share/557457906/16392015300

blog.39.net/wmj1224/a_16180113.html
blog.39.net/wmj1224/a_16180132.html
blog.39.net/wmj1224/a_16180154.html
user.qzone.qq.com/2870204119/blog/1379315848
user.qzone.qq.com/2870204119/blog/1379315920
user.qzone.qq.com/2870204119/blog/1379315987
user.qzone.qq.com/2870204119/blog/1379316066
user.qzone.qq.com/2870204119/blog/1379316106
user.qzone.qq.com/2870204119/blog/1379316147
user.qzone.qq.com/2870204119/blog/1379316179
user.qzone.qq.com/2870204119/blog/1379316211
user.qzone.qq.com/2870204119/blog/1379316405
user.qzone.qq.com/2870204119/blog/1379316452
event.weibo.com/1895676
event.weibo.com/1895740
event.weibo.com/1896080
event.weibo.com/1896174
event.weibo.com/1896526
event.weibo.com/1896564
event.weibo.com/1896616
event.weibo.com/1896778
event.weibo.com/1896830
event.weibo.com/1896880
event.weibo.com/1897168
book.weibo.com/booklist/92379
book.weibo.com/booklist/92388
zz.58.com/tese/15272776044425x.shtml
zz.58.com/yiyuan/15272789884675x.shtml
blog.sina.com.cn/s/blog_e205f1320101nxqt.html
blog.sina.com.cn/s/blog_e205f1320101nxqv.html
blog.sina.com.cn/s/blog_e205f1320101nxr2.html
blog.sina.com.cn/s/blog_e205f1320101nxr3.html
blog.sina.com.cn/s/blog_e205f1320101nxr5.html
t.163.com/event/info/eventId/5155878340404016017
t.163.com/event/info/eventId/7367156949960286987
kan.weibo.com/con/3623198177184243?_from=title
kan.weibo.com/con/3623198609078752?_from=title
kan.weibo.com/con/3623199087348384?_from=title
kan.weibo.com/con/3623199452252913?_from=title
kan.weibo.com/con/3623199741659968?_from=title
kan.weibo.com/con/3623200391777221?_from=title
kan.weibo.com/con/3623200760757145?_from=title
qing.blog.sina.com.cn/3792040242/e205f13233004b4i.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4j.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4k.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4l.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4m.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4n.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4o.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4p.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4s.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4t.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4u.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4v.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4x.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4y.html
qing.blog.sina.com.cn/3792040242/e205f13233004b4z.html
qing.blog.sina.com.cn/3792040242/e205f13233004b50.html
qing.blog.sina.com.cn/3792040242/e205f13233004b51.html
qing.blog.sina.com.cn/3792040242/e205f13233004b52.html
qing.blog.sina.com.cn/3792040242/e205f13233004b53.html
qing.blog.sina.com.cn/3792040242/e205f13233004b54.html
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87_%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E6%9C%80%E5%A5%BD%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E6%9C%80%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E4%B8%93%E7%A7%91%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E6%B2%BB%E7%96%97%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%84%BF%E7%AB%A5%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E4%B8%93%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%9C%80%E5%A5%BD%E7%9A%84%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E8%87%AA%E9%97%AD%E7%97%87%E5%8C%BB%E9%99%A2%E5%93%AA%E9%87%8C%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E5%8C%BB%E9%99%A2%E7%9C%8B%E8%87%AA%E9%97%AD%E7%97%87%E6%9C%80%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E5%B0%8F%E5%84%BF%E8%87%AA%E9%97%AD%E7%97%87%E6%9C%80%E5%A5%BD%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E6%AF%94%E8%BE%83%E5%A5%BD%E7%9A%84%E5%8C%BB%E9%99%A2%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E8%87%AA%E9%97%AD%E7%97%87%E5%93%AA%E5%AE%B6%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E8%87%AA%E9%97%AD%E7%97%87%E6%B2%B3%E5%8D%97%E5%93%AA%E5%AE%B6%E6%B2%BB%E7%96%97%E6%9C%80%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
iciba.com/%E6%B2%B3%E5%8D%97%E6%B2%BB%E7%96%97%E8%87%AA%E9%97%AD%E7%97%87%E5%93%AA%E9%87%8C%E5%A5%BD%E9%83%91%E5%B7%9E%E9%98%B2%E7%A9%BA%E5%85%B5%E5%8C%BB%E9%99%A2
meilishuo.com/group/45223409
meilishuo.com/group/45223709
meilishuo.com/group/45223895
meilishuo.com/group/45223945
meilishuo.com/group/45224001
meilishuo.com/group/45224249
meilishuo.com/group/45224437

第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.4 分析Linux内核的意义 1.5 Linux内核结构 1.6 Linux内核源代码 1.7 Linux内核源代码分析工具 第二章 Linux运行的硬件基础 2.1 i386的寄存器 2.2 内存地址 2.3 段机制和描述符 2.4 分页机制 2.5 Linux中的分页机制 2.6 Linux中的汇编语言 第三章中断机制 3.1 中断基本知识 3.2中断描述符表的初始化 3.3异常处理 3.4 中断处理 3.5中断的后半部分处理机制 第四章 进程描述 4.1 进程和程序(Process and Program) 4.2 Linux中的进程概述 4.3 task_struct结构描述 4.4 task_struct结构在内存中的存放 4.5 进程组织的方式 4.6 内核线程 4.7 进程的权能 4.8 内核同步 第五章进程调度 5.1 Linux时间系统 5.2 时钟中断 5.3 Linux的调度程序-Schedule( ) 5.4 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.2 Linux内存管理的初始化 6.3 内存的分配和回收 6.4 地址映射机制 6.5 请页机制 6.6 交换机制 6.7 缓存和刷新机制 6.8 进程的创建和执行 第七章 进程间通信 7.1 管道 7.2 信号(signal) 7.3 System V 的IPC机制 第八章 虚拟文件系统 8.1 概述 8.2 VFS中的数据结构 8.3 高速缓存 8.4 文件系统的注册、安装与拆卸 8.5 限额机制 8.6 具体文件系统举例 8.7 文件系统的系统调用 8 .8 Linux2.4文件系统的移植问题 第九章 Ext2文件系统 9.1 基本概念 9.2 Ext2的磁盘布局和数据结构 9.3 文件的访问权限和安全 9.4 链接文件 9.5 分配策略 第十章 模块机制 10.1 概述 10.2 实现机制 10.3 模块的装入和卸载 10.4 内核版本 10.5 编写内核模块 第十一章 设备驱动程序 11.1 概述 11.2 设备驱动基础 11.3 块设备驱动程序 11.4 字符设备驱动程序 第十二章 网络 12.1 概述 12.2 网络协议 12.3 套接字(socket) 12.4 套接字缓冲区(sk_buff) 12.5 网络设备接口 第十三章 启动系统 13.1 初始化流程 13.2 初始化的任务 13.3 Linux 的Boot Loarder 13.4 进入操作系统 13.5 main.c中的初始化 13.6 建立init进程 附录: 1 Linux 2.4内核API 2.1 驱动程序的基本函数 2.2 双向循环链表的操作 2.3 基本C库函数 2.4 Linux内存管理中Slab缓冲区 2.5 Linux中的VFS 2.6 Linux的连网 2.7 网络设备支持 2.8 模块支持 2.9 硬件接口 2.10 块设备 2.11 USB 设备
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值