CS 351 Operating Systems
CS 351 Operating Systems -- Homework 4
Fall 2016
|
Due: 11:59pm, Thurs. September 22, 2016 |
Last modified: September 16, 2016 |
Purpose
The purpose of this exercise is to understand how creating files affects the available disk space and the available i-nodes on a disk partition on Linux/UNIX.
Assignment (25 points)
Create and leave a copy of your C program for this assignment on Pond under cs351/hw4.
1) Write a C program on Pond that:
a. Accepts 2 command line inputs: number of files to create, size of each file (in bytes). For example run your program as ./hw4 10 20 will create 10 files of size 20 bytes each. Your program should check and report not only incorrect # of arguments, but also invalid argument values, such as zero or negative.
b. Creates that many files named after your first name (yourname0, yourname1, yourname2… ) and writes the required number of bytes to each file. One simple strategy is to write that many number of characters since each character is one byte. The content of the files isn’t important, just the size. Use ls –l to see the result and verify files of correct size were created.
c. After your program is debugged, delete all files created by your program on Pond before moving to next steps. Use command rm command to delete all files. For example rm crystal* will delete all fines whose name start with crystal.
If you think step 1 is too hard, request a copy of the C code from instructor and directly start from step 2 for this assignment. Of course you will receive 0 pts for the C code part of this assignment.
Before moving on to the next steps, do some research on the UNIX/Linux command df. Understand what df does, its usage, and what it outputs.
2) Run the commands
df .; df –i .
to find out how many disk blocks and i-nodes are in use. Save the results (and future results) to document your answers. Be aware that that 1K-blocks is for display purpose only and is not the real block size of Pond file system. The actual block size is bigger.
Read question (a) in step 12 before proceeding to step 3.
3) Run your program and create 10 files, each with 7 characters. Repeat step 2.
4) Run your program again and create 10 files, each with 13 characters. These 10 files will overwrite the 10 files you created in last step as they have the same names. So you still get 10 files under your working directory. Repeat step 2.
5) Run your program again and create 10 file, each with 25 characters. Repeat step 2.
6) You should be able to answer question (a) below now.
7) Delete the 10 files you just created. Repeat step 2.
8) Run your program and create 10 files, each with 8,192 characters.
9) Repeat step 7.
10) Run your program and create 10 files, each with 8,193 characters.
11) Repeat step 7.
12) Using your results, write a few paragraphs explaining each question below. Be specific. For example if list the numbers in comparison or examples involved to support any statement you make.
a. How creating the same files over and over (steps 3-5) affects disk block usage. Do you think the directory entry is reused when a new file overwrites an existing file of the same name? What about i-nodes? What about data blocks? How can you tell?
b. What difference you see when creating 8,192 byte files vs. 25 byte files. Be specific.
c. What difference you see when creating 8,193 byte files vs. 25 byte files. Be specific.
d. How creating any new file affects i-node usage. How can you tell?
e. What is the block size for this disk partition? How can you tell? If necessary try creating more files of different sizes.
f. How is it possible for a program to fail to create a new file on a file system using i-node, even though there are many free blocks still available? Hint, if your answer doesn’t include the word i-node, it’s not getting full credit.
Rubric
|
Task |
Points |
|
Program · Check and report invalid # of arguments · Check and report invalid argument value · Create correct # of files and report if any error · For each file: · write data of specified size · Close file at end of operation · Style (proper variable type, name; indentation) · Comment your program properly · Program compiles and runs |
(10) 1 1 2 1 2 0.5 0.5 1 1 |
|
df outputs (results or screenshots pasted to HW document) |
5 |
|
Analysis and write-up · a · b · c · d · e · f |
(10) 2 1.5 1.5 1.5 2 1.5 |
Notes
· C Program
Be sure to review material and the testbwrite.c from Friday Sept 16’s class (W05_F)
You can use the given file createfile.c (HW4.zip) as a template for extracting numbers out of command line argument. It runs as shown below:
bpeng@pond:~$ g++ -o createfile createfile.c
bpeng@pond:~$ ./createfile 10 7
Got two numbers: # of files-10, size-7
bpeng@pond:~$
There are many ways in C to “combine” different items such as strings and numbers into one string. One of the ways (but not the simplest) is to use sprintf() function http://www.cplusplus.com/reference/cstdio/sprintf/
· df and report:
If the behavior you observe seems odd or inconsistent, try increasing the number of files created to 20 or 50. Remember that you are on a multi-user system with lots of active processes, so your numbers may not be perfect, especially if other people are working at the same time as you! You can also try stringing together your commands so there isn’t much lag time between them, as in
df .; df –i .; ./a.out; df .; df –i .
If you are still having issues, try running several steps in quick sequence, then look at the resulting data. Minimizing time between commands on a crowded system will keep your data more coherent.
Submission
Upload a document with your answers and your .c program to HW4 on Canvas. Leave a copy of .c file and executable on Pond under cs351/hw4 so I can test.