<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cfuckfuck的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cfuckfuck</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cfuckfuck]]></copyright><item><title><![CDATA[谈谈我三年的代码历程]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/123130691</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/123130691</guid><author>cfuckfuck</author><pubDate>Fri, 25 Feb 2022 13:02:27 +0800</pubDate><description><![CDATA[心路历程
茫茫人海，我们是一个个相遇的“存储单元”。
看到这篇文章的朋友你们好，很高兴能有人来倾听我诉说大学里学习编程的经历。时光荏苒，岁月如梭。往事已去，但是也去得不久。我尽可能的还原出我刚刚开始学编程时的思维想法和行为指导，给大家讲出我蜕变至今背后的底层逻辑。
初入码海
我果然不是什么天才少年，刚开始打代码的我总是想着如何在“人”看来简单的去实现“计算机”看来复杂的事情。
我希望能写出一些新颖的代码、大家没见过的，以证明我是天才一般的存在。事实是我离那些“神人”太远了，无法突破前辈画好的框架。这是我第一]]></description><category></category></item><item><title><![CDATA[简述进程管理模块]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324175</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324175</guid><author>cfuckfuck</author><pubDate>Sun, 14 Nov 2021 21:41:25 +0800</pubDate><description><![CDATA[进程管理
进程作为用户操作的实体，它贯穿操作系统的整个生命周期，而程序是由若干段二进制代码组成的。进程可以说是程序的运行态抽象，即运行于处理器中的二进制码叫做进程，保存在存储介质中的二进制码叫做程序。进程会在执行过程中引入运行环境维护信息，因此进程管理啊主要涉及两个部分内容：进程控制结构体和进程间调度策略。
进程控制结构体用于记录和手机进程运行时的资源消耗信息，并维护程序运行的现场环境；进程间调度策略主要负责决策一个进程将在何时能获得处理器的执行权。
简述进程管理模块
进程作为拥有执行资源的最小单位，他为每]]></description><category></category></item><item><title><![CDATA[实现系统调用API]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324159</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324159</guid><author>cfuckfuck</author><pubDate>Sun, 14 Nov 2021 21:40:45 +0800</pubDate><description><![CDATA[实现系统调用API
​	系统调用API作为应用层与内核层的重要通信手段已被使用到各种应用场合，但应用层与内核层间的通信手段不只系统调用API一种，我们还可采用中断、地址重映射等方式在这两层间建立通信连接，不过最广泛使用的通信方式依然是系统调用API。
本次目的在于实现通过SYSENTER汇编指令完成应用层到内核层的跳转。
SYSENTER指令是一个快速进入0级特权的指令。在执行之前，处理器必须为其提供0级特权的衔接程序和0级特权全的栈空间，这些数据保存在MSR寄存器和通用寄存器当中。

IA32_SYSEN]]></description><category></category></item><item><title><![CDATA[实际中断处理]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324137</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324137</guid><author>cfuckfuck</author><pubDate>Sun, 14 Nov 2021 21:39:59 +0800</pubDate><description><![CDATA[中断处理
处理外界发出的信号。中断信号可能是关于数据读写操作的，也可能与外部设备控制有关。Intel处理器只有一个外部中断引脚INTR，为了使处理器能够同时接收多个硬件设备发送来的中断请求信号，特将锁有外部设备的中断请求汇总到中断控制器，再经由中断控制器的仲裁后，有选择性地将中断请求信号依次发往处理器的外部中断引脚INTR。
再多核处理器出现前,8269A PIC(Programmable Interrupt Controller，可编程中断处理器)是最普遍的中断控制器.
目前APIC（Advanced P]]></description><category></category></item><item><title><![CDATA[跳转到应用层]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324122</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/121324122</guid><author>cfuckfuck</author><pubDate>Sun, 14 Nov 2021 21:39:19 +0800</pubDate><description><![CDATA[跳转到应用层
到这一步简陋内核初步完成，此时的系统位于0级特权的内核层，而应用程序位于3特权级的应用层，若想从内核到应用层，在特权级跳转的过程中必须提供目标代码段和栈段以及其他跳转信息。
X86中的门
存在的目的
由于操作系统运行在0级特权下，应用程序在3级特权下，出于保护和稳定的目的，操作系统通过"门"机制向用户态程序提供必要服务。
共有四种门:中断门，陷阱门，调用门，任务门。
其中中断门，陷阱门，任务门都可以由门描述符描述（IDT）
如何跳转
特权级跳转的过程中必须提供目标代码段和栈段以及其他跳转信息。]]></description><category></category></item><item><title><![CDATA[初步内存管理]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/120940949</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/120940949</guid><author>cfuckfuck</author><pubDate>Sun, 24 Oct 2021 21:05:36 +0800</pubDate><description><![CDATA[初级内存管理
展示如何获取物理内容信息、统计可用物理内存 页数量以及内存分配物理页等相对基础的功能。
关于可用物理内存的相关信息，已经在Loader引导加载程序中通过BIOS中断服务程序获得，同时系统采用2MB物理页。
获取物理内存信息
物理信息通过BIOS中断服务程序INT 15h AX=E820h获得，并保存在物理地址7E00h处。接下来，将会把物理地址7E00h处的信息提取出来，转换成相应结构体再加以统计。
地址7E00h出的物理地址空间信息存有若干组，他们描述计算机平台的地址空间划分情况，其数量会依]]></description><category></category></item><item><title><![CDATA[操作系统如何建立异常处理？]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/120874049</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/120874049</guid><author>cfuckfuck</author><pubDate>Wed, 20 Oct 2021 20:10:15 +0800</pubDate><description><![CDATA[异常的分类

错误(fault)	错误是一种能被修复的异常。只要错误被修正，处理器可将程序或任务的运行环境还原至异常发生前，并重新执行产生异常的指令，也就是说异常的返回地址指向产生错误的指令，而不是其后的位置。
陷阱(trap)   陷阱异常同样运行处理器集训执行程序或任务，只不过处理器会跳过产生异常的指令，即陷阱异常的返回地址指向诱发陷阱指令之后的地址。
终止(abort)   终止异常用于报告非常严重的错误，它往往无法准确提供产生遗产的位置，同时也不允许程序或任务继续执行，典型的终止异常有硬件错误或系统]]></description><category></category></item><item><title><![CDATA[Loader]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/120874020</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/120874020</guid><author>cfuckfuck</author><pubDate>Wed, 20 Oct 2021 20:08:38 +0800</pubDate><description><![CDATA[Boot将代码的位置放置到0x7c00这个位置后，BIOS上电自检后就会跳转到这个位置执行Boot程序。Boot程序要做的就是在文件系统里一个目录项一个目录项的检索出loader.bin代码，放置到指定位置进行执行。之后的执行权都转交到了Loader上。
Loader会检测一下几部分：

检测硬件信息。

内核运行在非实模式下，然而很多的硬件信息需要在实模式下的BIOS中断服务中获取。


处理器模式切换

引导加载必经过三个模式：实模式(16位)-&gt;保护模式(32位)-&gt;长模式(64位)。CP]]></description><category></category></item><item><title><![CDATA[一文贯穿操作系统内核架构与当代软件架构迭代]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/120341996</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/120341996</guid><author>cfuckfuck</author><pubDate>Fri, 17 Sep 2021 10:48:55 +0800</pubDate><description><![CDATA[前言
在日复一日地使用各种中间件和学习原理时，笔者陷入了迷茫，各种中间件层出不穷：到底何时能学完？技术的本质到底是什么？学习到底怎么才能学习到根源？
但是，不难发现中间件日趋同质化，他们都朝着一个既定目标：进入内存加快运行速度。
但是进入了内存也不意味着快了，还得需要良好的数据结构去保障内存的空间利用和搜索效率。
反复思考，日夜琢磨。我终于得到了万物基于OS这个感触，虽然之前一直听说这句话，但直到最近的深入学习才感受到刻骨。
至此，特地开启一个新的系列，此系列不仅立志于内核相关内容分析，也专注与内核原理研究]]></description><category></category></item><item><title><![CDATA[Kubelet部分调优参数以及ceph架构解析]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/117585354</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/117585354</guid><author>cfuckfuck</author><pubDate>Sat, 05 Jun 2021 17:13:16 +0800</pubDate><description><![CDATA[参考官方文档：https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/

Ceph架构描述

FASTDFS


]]></description><category></category></item><item><title><![CDATA[Redis(六)：哨兵机制]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/117547304</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/117547304</guid><author>cfuckfuck</author><pubDate>Fri, 04 Jun 2021 09:17:47 +0800</pubDate><description><![CDATA[上次说到主从库集群模式。在这个模式下，如果从库发生了故障，客户端可以继续向主库或者其他从库发送请求，进行相关的操作，但是如果主库发生了故障，那就没有直接会影响到从库的同步，因为从库没有相应的主库可以进行数据复制操作了。
而且，如果客户端发送发的都是读操作请求，那还可以由从库继续提供服务，在这纯读的业务场景下还能被接受。但是，一旦有些操作请求了，按照主从库模式下的读写分离要求，需要由主库来完成写操作。此时，也没用实例可以来服务客户端的写操作请求了，如图
无论是写服务中断，还是从库无法进行数据同步，都是不能接受]]></description><category></category></item><item><title><![CDATA[OceanBase官方文档阅读笔记（一）]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/117513031</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/117513031</guid><author>cfuckfuck</author><pubDate>Thu, 03 Jun 2021 12:45:05 +0800</pubDate><description><![CDATA[什么是OceanBase?

OceanBase
数据库是阿里巴巴和蚂蚁集团不基于任何开源产品，完全自研的原生分布式关系数据库软件，在普通硬件上实现金融级高可用，首创“三地五中心”城市级故障自动无损容灾新标准，具备卓越的水平扩展能力，全球首家通过
TPC-C 标准测试的分布式数据库，单集群规模超过 1500 节点。 产品具有云原生、强一致性、高度兼容 Oracle/MySQL 等特性，
承担支付宝 100% 核心链路，在国内几十家银行、保险公司等金融客户的核心系统中稳定运行。


TTPC（transact]]></description><category></category></item><item><title><![CDATA[kubernetes]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/116103964</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/116103964</guid><author>cfuckfuck</author><pubDate>Sun, 25 Apr 2021 15:02:59 +0800</pubDate><description><![CDATA[自动恢复机制：杀死POD后 kubectl delete pod my_pod 仍然会新启动一个POD  或者用docker 杀死容器 也会创建新的容器 watch -n 1 kubectl get deploy   POD k8s最小单元    会记住部署
kubectl get deploy,pod
与kuberctl run 有什么区别:只有一个POD 没有deploy信息 不会自愈
自愈后不一定有卷仍然存在，看重新启动的机器（解决：共享卷挂在）
POD（容器组） 可以允许多个容器存在 共享IP等  ]]></description><category></category></item><item><title><![CDATA[JVM散记]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/116069686</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/116069686</guid><author>cfuckfuck</author><pubDate>Sat, 24 Apr 2021 15:42:38 +0800</pubDate><description><![CDATA[new对象对空间有几部分：（运行时元数据（hash值，GC分代 锁状态标志 数组长度） 类型指针（Header）） 父类数据（实例数据，私有的数据也会存放在这里，但是被封装无法直接访问，取决于继承的定义）栈空间如何知道堆空间在哪（Hash值）虚拟地址   填充数据
赋值的时候是赋Hash值
属性如何摆放？ 先放父类字段，再放其次的，宽度相同的也会放在一起。 可以通过参数设置子类数据在父类数据的空隙放置。
访问 句柄访问，。。。。访问定位：java栈本地变量表reference只想堆空间的对象 只需要移动句柄]]></description><category></category></item><item><title><![CDATA[Redis(三)]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/111351740</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/111351740</guid><author>cfuckfuck</author><pubDate>Tue, 30 Mar 2021 18:35:20 +0800</pubDate><description><![CDATA[为什么单线程的Redis这么快？
事实上Redis并不是单线程的，我们通常说的单线程是指Redis的网络IO和键值对的读写是由一个线程来完成的，这也是Redis对外提供键值存储服务的主要流程。但Redis的其他功能，比如说持久化，异步删除，集群数据同步等，其实是由额外的线程执行的。
为什么用单线程？
日常中我们会听到一个说法“使用多线程，可以增加系统吞吐率，或是可以增加系统扩展性。”对于一个多线程的系统来说，在有合理的资源分配的情况下，可以增加系统中的处理请求操作的资源实体，进而提升系统能够同时处理的请求数]]></description><category></category></item><item><title><![CDATA[redis(五)：主从库如何实现数据一致]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/115318042</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/115318042</guid><author>cfuckfuck</author><pubDate>Tue, 30 Mar 2021 18:34:39 +0800</pubDate><description><![CDATA[AOF和RDB分别可以通过回放日志和重新读入RDB文件的方式恢复数据，从而保证尽量少丢失数据，提升可靠性。
即使用了这两种方法，也依然存在服务不可用的问题，比如实例宕机了在恢复期间，是无法服务新来的数据存取请求。
那Redis又何来的高可靠性呢？
这里有两层含义：

数据少量丢失
服务尽量少中断
AOF和RDB保证了前者，而对于后者，Redis的做法就是增加副本冗余量，将一份数据同时保存在多个实例上。即使又一个实例出现了故障，需要过一段时间才能恢复，其他实例也可以对外提供服务，不会影响业务使用。

多实例保]]></description><category></category></item><item><title><![CDATA[Hadoop集群搭建-Hadoop运行模式]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/115030716</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/115030716</guid><author>cfuckfuck</author><pubDate>Mon, 22 Mar 2021 14:56:19 +0800</pubDate><description><![CDATA[Hadoop运行模式包括：本地模式，伪分布式模式，完全分布式模式。

本地模式：数据存储在linux本地。（测试使用）
伪分布式：数据存储在HDFS（Hadoop的一个数据存储软件）（公司没钱的时候使用）
完全分布式模式：数据存储在HDFS，多台服务器同时工作。（企业里大量使用）

完全分布式运行模式环境搭建

准备3台虚拟机
安装JDK
配置环境变量
安装Hadoop
配置环境变量
配置集群
单节点启动
配置ssh
群起并测试集群


...]]></description><category></category></item><item><title><![CDATA[分布式集群下的Session数据共享问题解决思路]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/113840145</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/113840145</guid><author>cfuckfuck</author><pubDate>Thu, 18 Feb 2021 00:10:15 +0800</pubDate><description><![CDATA[hash一致性
利用Ip的hash运算，使得nginx将某一ip下的访问都负载均衡到某台特定服务器，这样就不用多台服务器之间同时存储一样的数据。

]]></description><category></category></item><item><title><![CDATA[编程思想--七大原则]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/112321842</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/112321842</guid><author>cfuckfuck</author><pubDate>Fri, 08 Jan 2021 13:12:46 +0800</pubDate><description><![CDATA[单一职责原则

降低类的负责度，一个类只负责一项职责。
提高类的可读性，可维护性。
降低变更引起的风险

接口隔离原则

客户端不应该依赖它不需要的接口，即一个类对于另一个类的依赖应该建立在最小的接口上。

依赖倒转原则

高层模块不应该依赖底层模块，二者都应该依赖其抽象。
抽象不应该依赖细节，细节应该依赖抽象。
依赖倒转的中心思想是面向接口编程。
依赖倒转原则是基于这样的设计理念：相对于细节的多变性，抽象的东西要稳定的多，以抽象为基础搭建的架构比细节为基础的架构要稳定的多。在JAVA中，抽象指的是接口或者]]></description><category></category></item><item><title><![CDATA[Redis(四)]]></title><link>https://blog.youkuaiyun.com/cfuckfuck/article/details/112251183</link><guid>https://blog.youkuaiyun.com/cfuckfuck/article/details/112251183</guid><author>cfuckfuck</author><pubDate>Thu, 07 Jan 2021 16:48:46 +0800</pubDate><description><![CDATA[除了AOF还有什么在宕机后让Redis快速恢复数据？
AOF应用的场景应当是：数据量不大。一般而言只要采用的不是always的持久化策略，对性能的影响也就不大。
但是，也正因为记录的是操作命令而不是实际的数据，所以，用AOF的方法进行故障恢复的时候，需要逐一把操作日志的方法都执行一遍。如果操作日志非常多，Redis就会恢复的很缓慢，影响到正常使用。当然这不是理想的结果。
于是我们需要一种既可以保证可靠性，又能在宕机时实现快速恢复的其他办法？
内存快照
所谓内存快照，就是指内存中的数据在某一个时刻的状态记录。]]></description><category></category></item></channel></rss>