Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

0911 juluosdev

319 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

0911 juluosdev

  1. 1. A journey of file system on JOS Name :wayling Date: 2012/09/11 1
  2. 2. Who am I? wayling• JuluOSDev 星系 001 – virtual file system (2011-12-20 ) • http://www.juluos.org/home/files• 出沒於 TOSSUG & H4• waylingII@gmail.com 2
  3. 3. Introduction JOS• MIT 6.828 Operating System Engineering• JOS 是一個有基本雛形的作業系統,擁有傳統 unix-like functiom(fork, exec…) ,但是實作方式是 exokernel style( 實作的 unix-like functiom 大部份皆為 user level 的 函式,不實作於 kernel level) 。• 主要部份 : – Booting – Memory management – User-level environments – Preemptive multitasking – File system and spawn – A shell Lectures: Frans Kaashoek Robert Morris3
  4. 4. JOS File System• Part1 : File system struct – In-memory and On-disk struct• Part 2: Client/Server file system access – Remote procedure call (RPC) base on IPC + process 4
  5. 5. JOS File System• Part1 : File system struct – In-memory and On-disk struct• Part 2: Client/Server File System Access – remote procedure call (RPC) base on IPC + process 5
  6. 6. The File System• File system 是 memory 跟 disk 操作結合 而成的,意及我們在存取檔案時, memory 跟 disk 都需要有對應的 struct 來存放表示 。• static + dynamic 組成 file system – Static : 格式化硬碟成特有檔案系統格式 ex : ext2 、 ext3 。 – Dynamic : runtime 時作業系統保存對應的資 料結構,藉此操作 disk ,提供檔案操作給使用 者。 6
  7. 7. JOS file system item(1/2)• Sectors and Blocks – Sector :Disk 實體磁區 (512 B) 。 – Block : file system 存取單位 (4KB) 。• Superblocks (disk & memory) –   保存 block size 、 disk size 、 以及其他 meta-data 用於尋找到 root directory 。• Block Bitmap (disk & memory) – 管理 free disk blocks 。 7
  8. 8. JOS file system item(2/2)• File Meta-data – 保存”檔案”的必要資訊,檔名、大小、 以及 block pointer(direct/indirect) 。• Directories versus Regular Files – Directories 主要保存多個 file struct 。 – Regular Files 保存 data block 。 8
  9. 9. JOS file system struct overview User access File/Directory struct level Block struct level Disk struct (sector) level 9
  10. 10. Block N -1 File/directory data blocks t b siN l Bskc oN Free Block Bitmap : ez s pa m B ti Block 2: ez s ks dl a o T h o k c o b hguon E i t Spuerblock Block 1 i i BootSector Block 0 l 10 Block struct level t
  11. 11. File data blocks struct File (4096 bytes each) (256 bytes) Block 0Name : “foo” Block 1Size : 54321Direct block pointers: Block 2 Block 3 (10) Block 4Indirect block pointer : Block 5 Block 6 Indirect block ….. (4096 bytes) Block 9 Block 10 (1024) Block 11 Block 12 11 File/Directory struct level
  12. 12. JOS file system• Disk access – user-level file system - IDE disk driver 實做於 user space 。 – polling vs interrupt-driven 。• The Block Cache – 運用虛擬記憶體的特性,當程式存取檔案時轉換為對 其地址空間做存取 (0x10000000 - 0xD000000 , 3GB) 。• File operations – Open/Read/Write ,基本檔案操作。 12
  13. 13. Format a file system (1/2)#fsformat fs.img 1024 init newmotd motd struct File struct File / init dir reg struct File data block data block struct File init struct File mode reg newmode reg …… reg 13=> 請參閱 source code (fsformat.c)
  14. 14. Format a file system (2/2) #fs.img (block view) struct struct File File Name : “init” 21 Name : “/” Size : 54321 22 11 Size : 54321 12 23 Direct block pointers: 13 struct File 14 struct File Name : “newmode” Size : 54321 Name : “init” Size : 54321 35 36 52 37 53使用 block bitmap 紀錄 block 38 。 54分配狀況 ( 不一定連續分配 ) 14 55
  15. 15. JOS file system service• Part1 : File system struct – In-memory and On-disk struct• Part 2: Client/Server file system access – remote procedure call (RPC) base on IPC + process 15
  16. 16. JOS’s file overview• Server – server.c • Server 端主體,處理 clinet 請求。 (JOS 定義八種檔案操作請求 ) – FSREQ_OPEN, 、 FSREQ_SET_SIZE 、 FSREQ_READ – FSREQ_WRITE 、 FSREQ_STAT 、 FSREQ_FLUSH – FSREQ_REMOVE 、 FSREQ_SYNC – fs.c • File system 主體,處理 block 、 File 操作。 – bc.c • Block cache ,類似 copy on write 的機制。• Client – file.c • Client 端主要函式,對 server 發起 IPC 操作。 – fd.c • file description (fd) 是 server 跟 client 間的橋樑。 16
  17. 17. Client/Server file system access• JOS 使用 IPC 機制實作 client/server 架構的 file system service 。• File system Server (FSServ) : – 作為 user space porcess ,提供檔案操作服務, 藉由 IPC 提供其他 process 所需之請求。• Client : – 透過 FSServ 來存取檔案。• FSServ 特徵 : – Process id 1 。 – Block cache 。 – 回應 client 的 IPC request 。 17
  18. 18. FSServ Block cache FSServ address space 10xD000000 3GB 20x10000000 1. 申請實體記憶體 page 。 2. 讀取 block 大小到記憶體中。 (4096byte = 512 byte *8) 18
  19. 19. JOS IPC (Inter-process communication ) (1/2)• void ipc_send(envid_t to_env, uint32_t val, void *pg, int perm) static int sys_ipc_try_send(envid_t envid, uint32_t value, void *srcva, unsigned perm) 對某個 process 傳送資料 (32bit) ,也 可指定一個地址 ( 小於 UTOP) ,跟 對方 process 共享該 page 。 19=> 請參閱 source code (ipc.c & syscall.c)
  20. 20. JOS IPC (Inter-process communication ) (2/2)• int32_t ipc_recv(envid_t *from_env_store, void *pg, int *perm_store) static int sys_ipc_recv(void *dstva) Blocking 自己等待對方把資料傳送完 畢。可指定地址 ( 小於 UTOP) ,決定 要跟傳送者共享 page 的位置。 20=> 請參閱 source code (ipc.c & syscall.c)
  21. 21. Client (fs.c)// Send an inter-environment request to the file server, and wait for// a reply.static int fsipc(unsigned type, void *dstva){ if (debug) { ……. } ipc_send(envs[1].env_id, type, &fsipcbuf, PTE_P | PTE_W | PTE_U); return ipc_recv(NULL, dstva, NULL);}封裝 IPC 成一個 fsipc 給 client 使用。IPC 訊息格式定義於 fs.h 。 21 => 請參閱 source code (file.c & file.h)
  22. 22. FSServ (serv.c) 初始 OpenFile table 。 // 用於管理 FSServ 所開啟的檔 案。• struct OpenFile opentab[MAXOPEN] = { { 0, 0, 1, 0 }};• struct OpenFile { uint32_t o_fileid; struct File *o_file; int o_mode; struct Fd *o_fd;}; 22=> 請參閱 source code (serv.c)
  23. 23. 2 fd FSREQ_OPEN 0xD0000000 共享 page File 1 ipc_send 0x0ffff000 FSServ Client ipc_recv 3 ipc_recv 1 ipc_send1.Client 傳送一個 IPC request 讓 FSServ 接收, 3 fdrequest 中夾帶路徑,並申請 fd 待, FSServ 回 0xD0000000應 fd page ,用以共享 page 。2.FSServ 依路徑開啟 File struct 。3. 回應 Client, 並把開啟的 fd address map 到clinet 的 fd 上。 23 => 請參閱 source code (serv.c)
  24. 24. 2 fd FSREQ_WRITE 0xD0000000 File 1 0x0ffff000 ipc_send FSServ Client ipc_recv ipc_recv 1 ipc_send 3 31.Client 傳送一個 IPC request 讓 FSServ 接收, fdrequest 中夾帶 file id 及將寫入的資料 buffer 。2. 將資料 buffer 寫入檔案的 block 中。3. 回應 Client ,將 file pointer 位址返回。 24 => 請參閱 source code (serv.c)
  25. 25. JOS file system RPC• RPC base on IPC (ex : call file system server read a file) Regular env FSServ env lib/fd.c fs/fs.c read( ) file_read ( ) lib/file.c fs/serv.c RPC mechanism devfile_read ( ) serve_read ( ) lib/file.c fs/serv.c fsipc ( ) serve ( ) ipc_send ( ) ipc_recv( ) JOS IPC 25
  26. 26. Q&A 26
  27. 27. Reference• [mit 6.828 lab 5] http://pdos.csail.mit.edu/6.828/2011/labs/lab5/ 27

×