unsigned long do_brk(unsigned long addr, unsigned long len)首先會對於len這個長度進行頁面對齊,並且去判斷頁面對齊之後是否超出了邊界do_brk函式目的是為了將addr位置向後繼續申請len位元組長度,用作於擴充套件堆記憶體的長度
len = page_align(len);
if (!len)
return addr;
if ((addr + len) > task_size || (addr + len) < addr)
return -einval;
判斷一下當前的物理記憶體是否處於鎖定狀態(防止被交換出去),保持和原來狀態的一致性
if (mm->def_flags & vm_locked)
尋找當前addr位置對應的vma,看看是不是已經存在的vma將addr已經覆蓋了,需要呼叫munmap將覆蓋部分清除,保證addr到addr+len這一段記憶體是空白的沒有被任何的vma所覆蓋。
vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
if (vma && vma->vm_start < addr + len)
對於當前上乙個的vma進行擴充套件,擴充套件至addr加上len的位置,如果成功那麼ok,進行mm_struct的維護然後返回。
if (vma_merge(mm, prev, addr, addr + len, flags,
null, null, pgoff, null))
goto out;
否則需要來建立乙個新的vma來對當前的記憶體進行對映,將變數設定後放入vma的紅黑樹鍊錶中。
vma = kmem_cache_alloc(vm_area_cachep, slab_kernel);
if (!vma)
memset(vma, 0, sizeof(*vma));
vma->vm_mm = mm;
vma->vm_start = addr;
vma->vm_end = addr + len;
vma->vm_pgoff = pgoff;
vma->vm_flags = flags;
vma->vm_page_prot = protection_map[flags & 0x0f];
vma_link(mm, vma, prev, rb_link, rb_parent);
關於curl,關於url分析
leader需要我從海量的url中選取url最多的1000個站點,每個站點再隨機抽取100個url,分析url的質量,這裡的質量,就是指是否死鏈,是否全部廣告之類的 是否死鏈只要使用瀏覽器開啟看看就ok了 然而 1000乘以100 乙個乙個去做的話,顯然太傻,於是我使用了curl寫個程式去獲取htt...
關於需求分析
以下是抄別人的,特註明 1 弄清楚三件事 業務流 企業工作流程,比如如何填寫乙個 等 控制流 權力關係,因為這決定將來的許可權,比如簽字級別 資料與操作者的關係等 資料流 就是資料資訊的格式 流轉過程,比如乙個單據是怎麼流轉處理的,這決定將來的資料規劃 2 一定要盡量理解使用者業務,吃透使用者的業務...
關於cout hex原理分析
c primer plus提到,hex是乙個函式,hex cout 效果和cout 比如operator 經過反覆測試,其實hex被計算機理解為了函式指標型別。於是我偽造了乙個ios類,並構造了乙個cout物件,cout 經過cout include include using namespace ...