1. 程式人生 > >MIT6.828 HW10: big files

MIT6.828 HW10: big files

  在這次作業中我們將實現增大xv6檔案大小的最大值。目前xv6檔案被限制擁有140sectors(扇區),這是由於1個xv6的inode含有12直接塊序號和1個間接塊序號(指向128個塊序號),故此總共12+128=140。而我們的任務就是改變實現支援2層間接塊序號(每個含有128個原先的間接塊序號),導致總共擁有11+128+128*128=16523個扇區,大約8.5M大小。
  修改mkfs.c檔案,以使檔案系統支援更大的檔案大小。

int nblocks = 21049;
int nlog = LOGSIZE;
int ninodes = 200;
int size = 21113

  原先inode的結構圖:
  這裡寫圖片描述


  我們將使address11變成原先的間接塊,而原先的address間接塊變成2層間接塊。具體實現可以仿照原有的程式碼。

static uint
bmap(struct inode *ip, uint bn)
{
  uint addr, *a, *b;
  struct buf *bp, *bnp;

  if(bn < NDIRECT){
    if((addr = ip->addrs[bn]) == 0)
      ip->addrs[bn] = addr = balloc(ip->dev);
    return addr;
  }
  bn -= NDIRECT
; if(bn < NINDIRECT){ // Load indirect block, allocating if necessary. if((addr = ip->addrs[NDIRECT]) == 0) ip->addrs[NDIRECT] = addr = balloc(ip->dev); bp = bread(ip->dev, addr); a = (uint*)bp->data; if((addr = a[bn]) == 0){ a[bn] = addr = balloc(ip->dev); log_write(bp); }    brelse(bp); return addr; } bn -= NINDIRECT
; if(bn < NDBINDIRECT){ // Load single indirect block, allocating if necessary. if((addr = ip->addrs[NDIRECT+1]) == 0) ip->addrs[NDIRECT+1] = addr = balloc(ip->dev); bp = bread(ip->dev, addr); a = (uint*)bp->data; if((addr = a[bn/NINDIRECT]) == 0){ a[bn/NINDIRECT] = addr = balloc(ip->dev); log_write(bp); } // Load double indirect block, allocating if necessary. bnp = bread(ip->dev, addr); b = (uint*)bnp->data; if ((addr = b[bn%NINDIRECT]) == 0){ b[bn%NINDIRECT] = addr = balloc(ip->dev); log_write(bnp); } brelse(bnp); brelse(bp); return addr; } }

  跟分頁機制差不多,判斷塊序號落在哪個區域,若在直接塊序號(0-10)則直接獲取訪問;若在1層間接塊,獲取1層間接塊的內容,然後再從中得到序號對應的具體物理塊。

相關推薦

MIT6.828 HW10: big files

  在這次作業中我們將實現增大xv6檔案大小的最大值。目前xv6檔案被限制擁有140sectors(扇區),這是由於1個xv6的inode含有12直接塊序號和1個間接塊序號(指向128個塊序號),故此總共12+128=140。而我們的任務就是改變實現支援2層間接

mit6.828資源獲取

list 修改 -m 簡單 code con www. OS upload 自己2017年9月到2月這段時間慢慢把5個lab磨完了,期間遇到了不少困難和疑惑,所以打算通過寫博客的形式來回憶,記錄和總結自己學習mit6.828的過程。 MIT6.828就不用我多介紹了, mi

MIT6.828 HW11: crash

  在這次作業中,我們將探索xv6的log功能。主要就是建立1個crash,然後觀察recover的過程。   xv6的log重點是將檔案系統所有的磁碟更新操作原子化,比如在建立1個檔案時涉及到在目錄中新增新入口,並標記新檔案的inode為使用中。如果沒有lo

MIT6.828 HW6: Threads and Locking

  這次作業我們將探索使用執行緒和鎖來並行程式設計Hash表。下載pc.c程式然後編譯執行。   其實pc.c程式主要工作是使用隨機數生成keys,然後利用線性hash將其插入5個雜湊槽中,最後再取出每個key。   當使用2個執行緒來執行時,將會把keys

MIT6.828 HW3: xv6 system calls

第1部分:System cakk tracing   主要任務是在進行系統呼叫時,打印出系統呼叫的名字和返回值。   當你實現後,啟動時輸出如下(執行sh.c): ... fork -> 2 exec -> 0 open -> 3 clo

MIT6.828 LAB4 Part C: Preemptive Multitasking and Inter-Process communication (IPC)

  Lab 4的最後一部分就是實現搶佔式排程和程序間通訊。    Clock Interrupts and Preemption   先前的排程是程序資源放棄CPU,但是實際中沒有程序會這樣做的,而為了不讓某一程序耗盡CPU資源,需要搶佔式排程,也就需要硬

MIT6.828 HW9: barriers

  在這次作業中我們將探索如何使用pthread庫提供的條件變數來實現1個barrier(屏障)。屏障就是程式中的某一個點必須所有執行緒都到達才能繼續執行。   下載barrier.c,編譯並執行。 $ gcc -g -O2 -pthread barri

MIT6.828 LAB6: Network Driver

  抽了點空把LAB6重新整理一下,作為結束符~~。 Introduction   我們已經實現了1個檔案系統,當然OS還需要1個網路棧,在本次實驗中我們將實現1個網絡卡驅動,這個網絡卡基於Intel 82540EM晶片,也就是熟知的E1000網絡卡。  

MIT6.828 HW8 uthreads

  在這次作業中,我們將實現1個簡單的使用者級執行緒包。    Switching threads   下載uthread.c和uthread_switch.S到xv6目錄,在Makefile檔案的_forktest規則之後新增如下規則: _uthr

MIT6.828 虛擬地址轉化為實體地址——二級分頁

這個分頁,主要是在mit6.828的lab2的背景下來說的。 lab2主要講虛擬記憶體->實體記憶體的變換,通過一定的函式來實現軟體MMU的部分。 整個地址轉化的過程如下圖所示: 首先,明確一點,在程式裡面的所有地址,都是虛擬地址,程式裡面是不會出現實體地址的,就

webstorm 打開後 一直停留在scanning files to index....,或跳出內存不夠的提示框

tez jsb code ont 點擊 pst == sta fcm 用著有時會這樣,超級卡, 網上搜了下,原來如此,記錄下,免得忘了。 ------------------------- 說明: 在npm install 後,會出現Scanning files to in

如何刪除/mnt/cdrom?|如何刪除只讀文件系統(Read-only files ystem)? failed !bh ? 掛載光盤?掛載usb?

highlight failed roo aid 刪除 read cdrom oot 丟失 root權限下 : 首先用umount /mnt/文件夾 卸載文件系統,必要時可以用umount -f(可能丟失數據)然後rm -rf /mnt/cdrom mkdir /mnt/c

測並發 Too many open files 問題的解決

ref get http sign pro light 程序 sched pen ulimit -a 查看限制顯示: core file size (blocks, -c) 0 data seg size (kbytes, -d) u

解決生產環境too man open files的問題

最大文件打開數一、問題發現 剛剛上線的項目,前端使用的LVS+Haproxy做的負載均衡,支持高並發訪問量,但是支撐一段時間後總是出問題,查看日誌,發現有如下Too many open files的問題。May 12, 2017 12:49:20 AM org.apache.tomcat.util.ne

Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

pear http unique syn all 題解 錯誤信息 不同的 sync 在Tomcat的server.xml中配置兩個context,出現其中一個不能正常啟動,交換配置順序,另一個又不能正常啟動,即始終只有第二個配置能啟動的情況。如果單獨部署,都沒有問題。報錯大

HDU1018 Big Number n!的位數

math sam which n-2 printf ever ber some mil Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

595. Big Countries (Easy)

bsp pre and where eas country lee ont targe Source: https://leetcode.com/problems/big-countries/#/descriptionDescription: There is a tab

noi Big String 超級字符串

數字 sin ams com blog size nbsp src menu //來自2017青島信息競賽第一題 9269:Big String超級字符串 查看 提交 統計 提問 總時間限制: 10000ms 單個測試點時間限制: 1000ms 內存限制:

未能加載文件或程序集“file:///D:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.3DAnalyst.dll”或它的某一個依賴項。試圖加載格式不正確的程序。 行 129,位置 5。

config onf gac mil runt 方案 htm 添加 conf 能加載文件或程序集“file:///C:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.ADF.Loca

HDU 1018 Big Number (log函數求數的位數)

required iostream weight n! cst pos cati man 1.2 Problem Description In many applications very large integers numbers are required. S