国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看

合肥生活安徽新聞合肥交通合肥房產生活服務合肥教育合肥招聘合肥旅游文化藝術合肥美食合肥地圖合肥社保合肥醫院企業服務合肥法律

代寫Design and Implementation of File System

時間:2024-05-18  來源:合肥網hfw.cc  作者:hfw.cc 我要糾錯



Project 3: Design and Implementation of File System
April 16, 2024
1 Objectives
1. Design and implement a basic disk-like secondary storage server.
2. Design and implement a basic ffle system to act as a client using the disk services provided by
the server designed above.
3. Study and learn to use the socket API. Sockets are used to provide the communication mechanism
between (i) the client processes and the ffle system, and (ii) the ffle system and the disk storage
server.
2 Problem Statement
This project will be developed in several steps to help you understand the concepts and encourage
modular project development. You must adhere to the speciffcations given below. To share your
experiences effectively, you are recommended to keep a record of your insights during the coding. This
includes writing down any challenges encountered or bugs costing you a long time for debugging. By
doing so, you’ll avoid forgetting the details of your experiences when writing the report.
Step 1: Design a basic disk-storage system
Description: Implement, as an Internet-domain socket server, a simulation of a physical disk. The
simulated disk is organized by cylinder and sector.
• You should include the seek time in your simulation to account for track-to-track time (using
 usleep(3C), nanosleep(3R), etc). Make the seek time a value in microseconds, passed as a
command-line parameter to the disk server program.
• You should accept the number of cylinders and the number of sectors per cylinder from command
line parameters. Assume the sector size is ffxed as 256 Bytes.
• Your simulation should store the actual data in a real disk ffle, so you’ll need to accept a fflename
for this ffle as another command line option.
Hints:
1. You may ffnd that the mmap(2) system call provides you with the easiest way of manipulating
the actual storage. However, you are allowed to use ffle and ffle API to simulate the storage
representing your disk.
12. Given the challenges of socket programming, we have provided some functions. Please refer to
the code template provided on Canvas for how to use these functions. If you believe there are
bugs in the provided code, please contact the TA on time.
The Disk Server: The server should be able to understand the following commands and give
corresponding responses:
• I: Information request. The disk returns two integers representing the disk geometry - the number
of cylinders, and the number of sectors per cylinder.
• R c s: Read request for the contents of cylinder c sector s.
– The disk returns Yes followed by a whitespace and those 256 bytes of information, or No
if no such block exists.
– Hint: This will return whatever data happens to be on the disk in a given sector, even if
nothing has ever been explicitly written before.
• W c s l data: Write a request for cylinder c sector s. l is the number of bytes being provided,
with a maximum of 256. The data is those l bytes of data.
– The disk returns Yes to the client if it is a valid write request (legal values of c, s, and l),
or returns a No otherwise.
– In cases where l < 256, the contents of those bytes of the sector between byte l and byte
256 are undeffned, use zero-padded contents.
Hints:
1. The data format that you must use for c, s, and l above is a regular ASCII string, followed by
a space character. So, for example, a read request for the contents of sector 17 of cylinder 130
would look like R 130 17.
2. Strings are not equivalent to byte arrays: in a string, 0 represents the end of the string, but
this is not the case in a byte array. Besides, many bytes cannot be printed as visible characters.
Therefore, DO NOT use functions like strlen() or printf() on the data. The disk server will
not interact with users directly, so writing raw bytes to the ffle descriptor is acceptable.
The Disk Client: The client that you write here is mostly for the unit testing of the disk module.
The actual front-end user of this “disk” will be the ffle system implemented in the later steps. The
client should work in a loop, having the user type commands in the format of the above protocol, send
the commands to the disk server, and display the results to the user. Besides, you need to deal with
ASCII invisible characters. For example, add a command that prints data in binary or hexadecimal.
Otherwise, it would be difffcult to debug your disk server without such a debugging tool.
Command line:
a) Server:
./BDS <DiskFileName> <#cylinders> <#sector per cylinder> <track-to-track delay> <port=10356>
b) Client:
./BDC <DiskServerAddress> <port=10356>
2Figure 1: File System Architecture
Step 2: Design a basic ffle system
Implement an inode ffle system. The ffle system should provide operations including:
• Initialize the ffle system
• Create a ffle
• Read data from a ffle
• Write the given data to a ffle
• Append data to a ffle
• Remove a ffle
• Create directories
To provide the above ffle-like concepts, you need to operate on more than just the raw block
numbers that your disk server provides to you. You need to keep track of which blocks of storage are
allocated to which ffle, and the free blocks available on the disk.
Free space management involves maintaining a list of free blocks available on the disk. Two
alternative designs are suggested: a bit vector (1 bit per block) or a chain of free blocks. Associated
with each block is a cylinder# and sector#. “Writing to a ffle” is converted to “writing into a disk
location identiffed by (cylinder#, sector#)”. All this information should be stored on the disk, as the
ffle-system module in the memory is not persistent, and it could be shut down and restarted with data
lost.
The ffle system needs to support ffles of at least 16 KB in size, and fflenames must be at least 8
Bytes long.
Implement this ffle system server as another UNIX-domain socket server. On one hand, this
program will be a server for one UNIX-domain socket; on the other hand, it will be a client to the disk
server UNIX-domain socket from the previous parts, as shown below.
3The File-system Protocol: The ffle system server should be able to accept and respond to the
following commands.
• f: Format. This will format the ffle system on the disk, by initializing any/all of the tables that
the ffle system relies on.
• mk f : Create a ffle. This will create a ffle named f in the ffle system.
• mkdir d: Create a directory. This will create a subdirectory named d in the current directory.
• rm f : Delete ffle. This will delete the ffle named f from the current directory.
• cd path: Change the directory. This will change the current working directory to the path. The
path is in the format in Linux, which can be either a relative path or an absolute path. When the
ffle system starts, the initial working path is “/”. You need to handle “.” and “..” as special
cases.
• rmdir d: Delete a directory. This will delete the subdirectory named d within the current
directory.
• ls: Directory listing. This will return a listing of the ffles and directories in the current directory.
You are also required to return other meta information, such as ffle size, last update time, etc.
• cat f : Catch ffle. This will read the ffle named f, and return the data in it.
• w f l data: Write data into ffle. This will overwrite the contents of the ffle named f with the
l bytes of data. If the new data is longer than the data previously in the ffle, the ffle will be
extended longer. If the new data is shorter than the data previously in the ffle, the ffle will be
truncated to the new length.
• i f pos l data: Insert data to a ffle. This will insert l bytes of data into the ffle after the pos−1
th
character but before the pos
th
character (0-indexed). If the pos is larger than the size of the ffle,
append the l bytes of data to the end of the ffle.
• d f pos l: Delete data in the ffle. This will delete l bytes starting from the pos character
(0-indexed), or till the end of the ffle (if l is larger than the remaining length of the ffle).
• e: Exit the ffle system.
For testing/demonstration purposes, you need to implement a command-line client, similar to the
one that you wrote for the disk server in Step 1. The ffle-system client should work in a loop, allowing
the user to type commands in the format of the above protocol, send the commands to the ffle server,
and display the results to the user.
Hints: We suggest following the below steps to implement your ffle system:
• Implement an in-memory ffle system, reading commands via STDIN, where the data is stored in
memory and disappears after the system reboot.
• Write the data to a raw ffle to achieve the data persistence.
• Implement the ffle system as a server, accepting commands passed through a client.
4• Replace the raw ffle with the disk server implemented in Step 1. This should only require
modifying a few lines of code.
Command line:
a) Disk Server:
./BDS <DiskFileName> <#cylinders> <#sectors per cylinder> <track-to-track delay> <port=10356>
b) File-system Server:
./FS <DiskServerAddress> <BDSPort=10356> <FSPort=12356>
c) File-system Client:
./FC <ServerAddr> <FSPort=12356>
Step 3: Support multiple users in the ffle system
A real-world ffle system is supposed to store data for more than one user. In this step, you need to
make some changes to your ffle system so that it becomes a multi-user system. The key problem to
solve here is to separate the stored ffles and data for different users. Instead, how to support the
parallel operations by multiple clients is considered in the “Extension 2 - Multi-Clients” in Step 4 as
an optional extension. In other words, in this step, you can safely assume different users only connect
to and access the ffle system in sequential order. One client will ffnish the actions and disconnect
before another client establishes her/his connection and performs actions.
To support the multi-user feature, we ffrst need to design a data structure to store the user information,
 which should be stored in the ffle system, instead of memory. Then you need to provide
approaches and interfaces to log into your ffle system, create new users, delete users, etc.
Each user should have her/his home folder, own ffles, and so on. Regarding the ffle access control,
the users can share some ffles with other users, or make ffles only visible to themselves. You need to
design a ffle access protocol to control ffle read/write permissions.
Step 4: Optional extensions
In this step, we provide some optional extra functions to the basic ffle system. Implementing any of
the following functions will help you earn bonus points. Besides, you are encouraged to implement any
other additional functions/optimizations that are useful to your ffle system. Please clearly indicate
the optional functions you have implemented in your ffle system, and demonstrate your extensions
through empirical performance evaluation or qualitative analysis.
Extension 1 - Caching: Reading ffles can be expensive, incurring many I/Os to the (slow) disk.
Imagine an open example: without caching, every ffle open would require at least two reads for every
level in the directory hierarchy (one to read the inode of the directory in question, and at least one to
read its data). With a long pathname (e.g., /1/2/3/ ... /100/ffle.txt), the ffle system would literally
perform hundreds of reads to just open the ffle. To remedy what would be a huge performance issue,
you can use a region in the system memory to cache frequently accessed or important blocks. Similar
to the virtual memory mechanism, strategies such as LRU and different algorithms would decide which
blocks to keep in the cache. Implement a cache in the memory, select your page replacement algorithm
5for the cache, and share your design and performance evaluation (e.g., how many times you have
accelerated your file read operations?)
Extension 2 - Multi-clients: You have supported multi-users in step 3 which mainly focuses on
separating the user folders/files and user account management. Another thing you can do is to support
more than one user to use the file system at the same time. That means your file system server should
support parallel requests from multiple clients. Different from the shell problem in Project1, here we
have more challenges when more than one user logs in to your file system. For example, user A wants
to write a file, while user B wants to read the same file. There is a read/write conflict. You can
come up with a solution to solve this conflict. There are still some other problems like this. It’s really
difficult to handle all such synchronization situations, so we encourage you to try your best to consider
as many issues as possible and explain your solutions in the report.
Extension 3 - Journaling: Consider the crash-consistency problem, that is, how to update persistent
data structures despite the presence of a system crash. The system may crash or accidentally
power off between any two writes, and thus the on-disk state may only partially get updated. After the
crash, the system boots and wishes to mount the file system again. Given that crashes can occur at
arbitrary points through time, how do we ensure the file system keeps the on-disk image in a reasonable
state? Many modern file systems use the idea of journaling (also known as write-ahead logging), where
a sequence of updates is treated as a single indivisible unit (called transaction), ensuring that either
all of the updates are committed to the disk, or none of them are. Try to implement a journaling and
transactions mechanism in your file system.
3 Implementation Details
In general, the execution of the programs above is carried out by specifying the executable program
name followed by the command line arguments.
• Use Ubuntu Linux and GNU C Compiler to compile and debug your programs. GCC-inlineassembly
is allowed.
• See the man pages for more details about specific system or library calls and commands: sleep(3),
gcc(1), mmap(2), usleep(3), nanosleep(3), etc.
• When using system or library calls you have to make sure that your program will exit gracefully
when the requested call cannot be carried out.
• One of the risks of experimenting with forking processes is leaving unwanted processes hanging
which wastes system resources. Please make sure that each process/thread is terminated cleanly
when the program exits. A parent process should wait until all its child processes finish, print a
message, and then quit.
• Your program should be robust. If any of the calls fail, it should print an error message and exit
with an appropriate error code. Please always check for errors when invoking a system or library
call.
• Please ensure that your program can work correctly with the tests we provided and exit properly.
64 Material to be submitted
• Create a folder named Prj3_studentID that includes your source codes, Makefile, and report.
Use meaningful names for the files so their contents are recognizable. Then compress the folder
into a file named Prj3_studentID.tar, ensuring that only the folder itself is included in the tar
file.
• You are not required to submit the executables. Make sure your programs can be compiled with
the Makefile before the submission.
• Enclose a README file that lists the files you have submitted along with a one-sentence explanation.
Call it README.md.
• Please state clearly the purpose of each program at the start of the program file. Add comments
to explain your program.
• Test runs: You must show that your program works for all possible inputs. Submit online a
single typescript file clearly showing the working of all the programs for correct input as well as
a graceful exit on error input. Call it test.md or test.pdf.
• Submit a short report to present the analysis. You can also write down important methods and
observations you find useful when finishing your project. Call it report.pdf.
• We provide a code template for this project. Here’s how the file structure looks (you can feel
free to add other files you need):
Prj3 52202191xxxx
Makefile
README.md
report.pdf
test.md
step1
BDS.c
BDC.c
Makefile
step2
FS.c
FC.c
Makefile
step3
Makefile
...
step4
Makefile
...
• Submit your Prj3_StudentID.tar file on Canvas.
• Due date: 23:59 on May. 31, 2024.
• Demo slots: Around June 1, 2024. Demo slots will be posted later on a shared document.
Please sign up for one of the available slots.
 7• You are encouraged to present your design of the project optionally. The presentation time is
16:00-17:40, June 4, 2024 (Course meet time of the 16th week). Please pay attention
to the course website.
請加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp




 

掃一掃在手機打開當前頁
  • 上一篇:代寫COMP1005、代做Python/C++程序語言
  • 下一篇:大學生程序兼職群 大學生編程兼職群 大學生python兼職群
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    流體仿真外包多少錢_專業CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢_專業CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務 管路流場仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務 管路
    流體CFD仿真分析_代做咨詢服務_Fluent 仿真技術服務
    流體CFD仿真分析_代做咨詢服務_Fluent 仿真
    結構仿真分析服務_CAE代做咨詢外包_剛強度疲勞振動
    結構仿真分析服務_CAE代做咨詢外包_剛強度疲
    流體cfd仿真分析服務 7類仿真分析代做服務40個行業
    流體cfd仿真分析服務 7類仿真分析代做服務4
    超全面的拼多多電商運營技巧,多多開團助手,多多出評軟件徽y1698861
    超全面的拼多多電商運營技巧,多多開團助手
    CAE有限元仿真分析團隊,2026仿真代做咨詢服務平臺
    CAE有限元仿真分析團隊,2026仿真代做咨詢服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗證碼 寵物飼養 十大衛浴品牌排行 suno 豆包網頁版入口 wps 目錄網 排行網

    關于我們 | 打賞支持 | 廣告服務 | 聯系我們 | 網站地圖 | 免責聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網 版權所有
    ICP備06013414號-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    国产精品99久久久久久久久| 中文字幕一区二区三区有限公司 | 国产精品免费视频久久久| 九一免费在线观看| 久久久久网址| 久久精品福利视频| 国产精品久久久久久久久影视 | 粉嫩精品一区二区三区在线观看| 国产欧美一区二区白浆黑人| 国产三级精品在线不卡| 国产日韩欧美综合| 逼特逼视频在线| 久久最新免费视频| 久久久久天天天天| 国产精品久久久久久影视| 精品国产第一页| 中文字幕综合在线观看| 亚洲精品中文综合第一页| 欧美一区二区三区四区夜夜大片| 天天综合五月天| 奇米成人av国产一区二区三区| 日本精品免费视频| 精品视频无码一区二区三区| 高清一区二区三区日本久| 国产精品7m视频| 久久精品91久久香蕉加勒比| 久久夜色精品国产欧美乱| 亚洲一二三区在线| 欧美最猛性xxxx| 国产精品综合网站| 久久av免费观看| 国产精品久久久久久久7电影| 久久99国产精品久久久久久久久| 亚洲精品成人三区| 欧美精品成人网| 97人人香蕉| www.亚洲成人| 亚洲一区二区三区四区视频| 日韩和欧美的一区二区| 国产亚洲欧美另类一区二区三区| 91精品国产综合久久久久久丝袜| 日日摸夜夜添一区| 在线观看亚洲视频啊啊啊啊| 青青草国产免费| 成人免费福利在线| xxx一区二区| 亚洲乱码一区二区三区三上悠亚 | 亚洲中文字幕无码一区二区三区| 日韩欧美一区三区| 国产一级不卡视频| 国产精品99蜜臀久久不卡二区| 国产精品美女视频网站| 天堂资源在线亚洲资源| 国产在线精品自拍| www.日本久久久久com.| 亚洲欧洲久久| 国产亚洲精品网站| 久久精品亚洲国产| 日本精品一区二区三区在线 | 亚洲伊人久久综合| 国模无码视频一区二区三区| 国产suv精品一区二区| 欧美激情国产日韩精品一区18| 热久久免费国产视频| 91高跟黑色丝袜呻吟在线观看| 国产精品福利网站| 欧洲一区二区在线| 国产高清精品在线观看| 亚洲乱码中文字幕久久孕妇黑人| 国产一区 在线播放| 国产精品视频中文字幕91| 日本高清不卡在线| 91久久久久久久久久久| 久热精品视频在线观看一区| 欧美黄色免费影院| 久久久噜噜噜久久久| 性一交一乱一伧国产女士spa | 国产伦精品一区二区三区视频黑人 | 久久99精品国产一区二区三区 | 欧美一区二三区| 国产成人精品免费久久久久 | 亚洲精品天堂成人片av在线播放| 国产一级片黄色| 国产精品久久久999| 青青视频免费在线观看| 国产高清一区视频| 日韩一区二区三区高清| 久久久一本精品99久久精品66| 亚洲va久久久噜噜噜| 91福利视频网| 日产中文字幕在线精品一区| 久久频这里精品99香蕉| 亚洲成人一区二区三区| 99国产精品白浆在线观看免费| 亚洲最大福利网站| 91免费在线观看网站| 日韩一区二区三区高清| 国产成一区二区| 日韩欧美一区二| 俺去亚洲欧洲欧美日韩| 欧美一区国产一区| 久热精品视频在线| 国产又黄又爽免费视频| 一区二区三区四区免费观看| 97碰碰碰免费色视频| 无码少妇一区二区三区芒果| 久久久久久网址| 欧美精品国产精品久久久| 国产免费一区二区| 亚洲不卡中文字幕| 日韩视频―中文字幕| 精品一区久久久久久| 中文字幕一区二区三区有限公司 | 97精品视频在线观看| 日韩中文字幕免费在线| 日韩中文字幕视频在线| 国内精品视频一区二区三区| 免费不卡欧美自拍视频| 91精品天堂| 欧美一区二区影视| 国产精品国产精品国产专区不卡| 国产精品一区二区在线| 中文字幕一区综合| 久久国产精品久久| 免费99视频| 亚洲高潮无码久久| 国产成人精品av| 免费观看国产成人| 亚洲精品高清国产一线久久| 久久精品2019中文字幕| 国产欧美一区二区三区久久 | 久久人人九九| 国内精品久久久久久久果冻传媒| 中国成人亚色综合网站| 91精品国产91久久久久久吃药| 人妻av无码专区| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品综合不卡av| 日韩亚洲欧美精品| 久久福利网址导航| 国产成人精品福利一区二区三区| 免费看又黄又无码的网站| 亚洲精品免费在线视频| 精品国偷自产在线视频| www插插插无码免费视频网站| 欧美专区福利在线| 伊人精品久久久久7777| 精品国产网站地址| 91美女片黄在线观看游戏| 人人妻人人澡人人爽欧美一区 | 黄www在线观看| 大地资源第二页在线观看高清版| 国产精品高精视频免费| 久久精品国产综合精品| 国产日韩欧美另类| 日韩一级免费看| 中文字幕第一页亚洲| 国产精品免费一区二区三区四区 | 一区二区三区四区欧美| 久久视频中文字幕| 国产成人激情视频| 国产伦视频一区二区三区| 欧美日韩精品免费观看| 亚洲精品中字| 欧美精品做受xxx性少妇| 色偷偷av一区二区三区| 91国产视频在线播放| 国产九九九九九| 黄色录像特级片| 日本精品一区二区三区在线| 精品国产乱码久久久久久88av | 亚洲精品tv久久久久久久久| 精品国产福利| 久久综合五月天| 国产精品视频午夜| 久久精品99久久久久久久久| 日韩在线免费高清视频| 国产精品99久久久久久久久| 国产精品亚洲自拍| 国产乱码精品一区二区三区卡 | 国产成人97精品免费看片| 超碰成人在线免费观看| 国产一区免费在线| 免费av观看网址| 国模无码视频一区二区三区| 欧美 日韩 国产 在线观看| 日韩欧美亚洲区| 欧洲美女7788成人免费视频| 日韩视频精品| 日本视频一区在线观看| 欧美视频在线观看网站| 久久99精品久久久久久琪琪| 精品午夜一区二区| 欧美日韩亚洲综合一区二区三区激情在线| 亚洲a在线观看| 精品久久久三级| 精品国产乱码久久久久久108 | 国产精品久久婷婷六月丁香| 国产精品久久久久久五月尺| 国产精品第七影院|