buddy

Linux 内存管理一

别来无恙 提交于 2020-01-31 11:03:20
疫情在家,整理下以前的学习笔记, 作为linux 三个最重要的部分之一(进程,io,内存),内存管理是非常重要的,是深入理解linux各个部分的基础,linux的内存管理与其他rtos的内存管理不一样,他是一个“富” os,也就是支持很多的应用同时跑,还需要支持应用之间的内存隔离。Linux 内存不仅仅用于内存,比如作为硬盘的补充,硬盘本身也可以作为内存来使用。 硬件原理和分页管理 只要我们打开了MMU之后,CPU只能看到虚拟地址,最终这个虚拟地址通过MMU根据页表查询到对应的硬件地址。比如要访问虚拟地址0x1234560,其中0x560 是页内偏移, 0x1234 是页号, 比如查到0x1234 对应的物理地址是1G,CPU访问0x1234560 的时候,实际访问的是1G+0x560 的地址。 物理地址是页表下面的一个数值,所以物理地址本质上是一个整数,而不是指针。地址是以*p访问到的,其实从linux中物理地址的数据类型也可以看出来 页表除了可以查虚拟地址对应的物理地址以外,还承担了一项非常重要的权限管理(RWX),RWX指读写执行权限,对linux安全非常重要,比如代码段映射为只读读加可执行,那么无论是应用还是内核里面的任何错误行为都不会改写代码段,只要一改写硬件就会发生page fault,软件的错误行为就会被硬件拦截,硬件里面还可以管理另外一个重要的权限

数据库中间件分片算法之stringhash

牧云@^-^@ 提交于 2020-01-03 17:29:08
前言 又是一个夜黑风高的晚上,带上无线耳机听一曲。突然很感慨一句话: 生活就像心电图,一帆风顺就证明你挂了。 就如同我们干运维的,觉得很简单的事情,有时候能干出 无限可能 。还是言归正传吧,这一次我们来说说stringhash分区算法。 1.hash分区算法 2.stringhash分区算法 3.enum分区算法 4.numberrange分区算法 5.patternrange分区算法 6.date分区算法 7.jumpstringhash算法 StringHash分区算法的配置 < tableRule name = " rule_hashString " > < rule > < columns > name </ columns > < algorithm > func_hashString </ algorithm > </ rule > </ tableRule > < function name = " func_hashString " class = " StringHash " > < property name = " partitionCount " > 3,2 </ property > < property name = " partitionLength " > 3,4 </ property > < property name = " hashSlice

How do you do web forms model validation?

匿名 (未验证) 提交于 2019-12-03 03:04:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: We have an application with three layers: UI, Business, and Data. The data layer houses Entity Framework v4 and auto-generates our entity objects. I have created a buddy class for the entity VendorInfo : namespace Company.DataAccess { [MetadataType(typeof(VendorInfoMetadata))] public partial class VendorInfo { } public class VendorInfoMetadata { [Required] public string Title; [Required] public string Link; [Required] public string LinkText; [Required] public string Description; } } I want this validation to bubble up to the UI, including

How to avoid re-implementing sort.Interface for similar golang structs

匿名 (未验证) 提交于 2019-12-03 03:03:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: There is one problem bothering me in Golang. Say I have 2 structs: type Dog struct { Name string Breed string Age int } type Cat struct { Name string FavoriteFood string Age int } And when I try to sort []*Dog and []*Cat by Age, I have to define 2 different sort struct like: type SortCat []*Cat func (c SortCat) Len() int {//..} func (c SortCat) Swap(i, j int) {//..} func (c SortCat) Less(i, j int) bool {//..} type SortDog []*Dog func (c SortDog) Len() int {//..} func (c SortDog) Swap(i, j int) {//..} func (c SortDog) Less(i, j int) bool {//.

How to send an imessage text with applescript, only in provided service?

匿名 (未验证) 提交于 2019-12-03 02:44:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: Can somebody show me how to send a message directly to the user of iMessage via Messages app? tell application "Messages" if service type of service of buddy whose name is ("Name here" is "iMessage") then set x to 1 if service type of service of buddy whose name is ("Name here" is "iMessage") then set x to 2 if service type of service of buddy whose name is ("Name here" is "iMessage") then set x to 3 send "Message" to buddy "mail of name" of service x end tell I need to send a message to an account only via iMessage, not via google talk, AIM

【原创】(七)Linux内存管理 - zoned page frame allocator - 2

这一生的挚爱 提交于 2019-12-01 07:12:11
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 本文将分析 Buddy System 。 Buddy System 伙伴系统,是通过将物理内存划分为页面来进行管理的系统,支持连续的物理页面分配和释放。此外,使用与碎片相关的算法来确保最大的连续页面。 先通过一个例子大体介绍一下原理吧: 空闲的物理页框按大小分组成 0~MAX_ORDER 个链表,每个链表存放页框的大小为2的n次幂,其中n在 0 ~ MAX_ORDER-1 中取值。 假设请求分配 2^8 = 256 个页框块: 检查 n = 8 的链表,检查是否有空闲块,找到了则直接返回; 没有找到满足需求的,则查找 n = 9 的链表,找到 512大小 空闲块,拆分成两个 256大小 块,将其中一个 256大小 块返回,另一个 256大小 块添加到 n = 8 的链表中; 在 n = 9 的链表中没有找到合适的块,则查找 n = 10 的链表,找到1024大小空闲块,将其拆分成 512 + 256 + 256 大小的块,返回需要获取的 256大小 的块