SlideShare a Scribd company logo
Operating System
Engineering
Programming Homework Help Solutions
For any help regarding Programming Homework Help visit :
https://www.programminghomeworkhelp.com/ ,
Email - support@programminghomeworkhelp.com or call us at - +1 678 648 4277
I Traps/Interrupts
1.Draw a picture of the kernel stack after the following events have happened: (1) the icode program
has called the exec system call; and (2) a clock interrupt handler has interrupted exec() at line 3027;
and (3) the clock handler just finished executing line 3739? For each entry on the stack describe what
that entry represents. You may ignore local variables.
The kernel stack starts off empty. A system call must be the first thing on a trap frame at this point
— if any interrupts happened before, they would not have had any other process to switch to on the
return path.
in trap
in trap
in trap1
in exec
CLOCK interrupt
in clock
PSW from icode
PC of icode’s SYS instruction r0 of icode
PSW after trap (br7 + 6) r1 of icode
SP of icode
masked PSW after trap (6)
return address for call1 return (line 786) saved r5
saved r4 saved r3
saved r2
&cret
&exec (an argument to trap1) return address
in trap (line 2772) saved r5/r4/r3/r2 + &cret
return address in trap1 (line 2848) saved
r5/r4/r3/r2 + &cret
PSW from exec
PC from exec (line 3027) r0 from
exec
PSW after interrupt (br6) r1 from
exec
sp (same as sp now) masked
PSW
return address in trap (line 800) saved
r5/r4/r3/r2 + &cret
Programming Homework Help Solutions
2. Which kernel stack is the one you drew in response to question 1? Kernel stack 0?
Kernel stack 1?
Kernel Stack 1 is used. Process 1 (icode) was executing at the time of the trap and so its
kernel stack is used. If the machine is already in kernel mode when an interrupt happens,
the current kernel stack is used.
3. Can another clock interrupt interrupt the handler at line 3739? At line 3770?
At line 3739, another clock interrupt can not interrupt the handler: the priority of the
processor has been set to 6 already as a result of line 534 (or 535).
At line 3770, the interrupt handler has lowered the priority level to 5 so another clock
interrupt (at level 6) could interrupt the handler at this point.
4. Estimate how large a kernel stack must be to handle recursive traps and interrupts
correctly?
The kernel stack must be able to hold sufficient stack and trap frames for the most
recursive case. This occurs if a process executes a system call, receives a priority 4
interrupt, followed by a priority 5 interrupt, followed by a priority 6 interrupt, followed
by a re-entrant priority 6 interrupt.
In addition to the size of the trap frame (i.e. the arguments to trap), you would need to
consider stack frames generated by the deepest system call procedure call path (e.g. open
calls namei which calls . . . ; this is probably not too deep but might change as the kernel
evolved), the deepest interrupt 4 handler call path, etc.
From the figure, we can see that a system call trap requires 20 stack elements for the trap
frame and stack frames for the trap dispatch code (plus some extra for locals). Similarly, a
non-syscall trap requires 8 stack elements for the trap frame. Assume that the maximum
call depth for a function in the kernel is 4, where each stack frame requires 6 stack
elements (5 from csav, and an average of 1 argument). This gives a maximum depth of
approximately
Programming Homework Help Solutions
. Since each stack entry is two bytes, this gives a lower bound of 344 bytes. Of course, some
additional room will be needed to account for local variables, which were ignored for this problem.
II Coordinating threads
5.What do the statements at line 2088 and line 2092 do?
Line 2088 calls spl6() which sets the processor privilege level to 6. This causes all interrupts of priority less
than or equal to 6 to be ignored. Line 2092 calls spl0(), lowering the privilege level back to 0. These calls are
used to mark atomic sections.
6. Why are these statements needed? Give an actual sequence of events that will result in erroneous behavior
if these two statements are omitted. Your sequence of events should be as concrete as possible, not merely
hypothetical.
Programming Homework Help Solutions
1.runin++ on 1954
2.scheduler calls sleep on 1955 with runin as channel
3.executes lines 2089 setting p wchan to &runin
4.processor is interrupted by clock
5.clock interrupt handler sets runin to zero (3821)
6.handler calls wakeup with &runin as argument (3822)
7.wakeup calls setrun, which sets p wchan to zero and p stat to SRUN (2139–2140)
8.handler returns
9.now scheduler sets p stat to SSLEEP(2090)
10.and calls swtch
11.scheduler will never be woken up, because p stat == SSLEEP and p wchan is zero
Deadlock:
1.a user process calls indirectly bwrite(), which launches write on buffer.
2.then calls iowait,
3.which calls sleep with the address of the buffer as the channel
4.sleep sets p wchan (2089)
5.disk interrupt comes in completing the write of the buffer
6.it calls iodone, which calls wakeup on the buffer address
7.calls setrun, which sets p wchan to zero and p stat to SRUN
8.interrupt handler completes
9.process sets p stat to SSLEEP(2090)
10.and call swtch
11.process will never be woken up because p wchan is zero and p stat SSLEEP
Programming Homework Help Solutions
III Address spaces
7. Draw the prototype segmentation registers with their actual content after the call to estabur() on line 3152 has completed.
Assume that w0 is 410, w1 is 129, w2 is 32, and w3 is 128 (see lines 3076 through 3082). Explain the content of the registers
briefly.
Converting what we are given into blocks (and hence the arguments to estabur), we get:
text size is 129 bytes (w1 = 129) SSIZE
(stack size) = 20 blocks
==> nt = 3 blocks
==> ns = 20 blocks
data size is 160 bytes (w2 = 32, w3 = 128) ==> nd = 3 blocks USIZE = 16 blocks
That is, estabur(nt = 3, nd = 3, ns = 20, sep = 0).
Since each segment (8KB) contains 128 blocks, the text, data, and stack each fit within one segment:
+ + + + PAR[7]: |
-89 | PDR[1]: | 108 ED RW |
+ + + +
PAR[7] = USIZE + nd + ns - 128
= 16 + 3 + 20 - 128
= 39 - 128
= -89
PDR[1] = (128 - ns) << 8 | ED | RW
= 108<<8 | ED | RW
+ + + +
2 RW |
PAR[1]: | USIZE | PDR[1]: |
+ + + +
PAR[1] = USIZE = 20
PDR[1] = (nd - 1) << 8) | RW
= 2<<8 | RW
+ + + +
| 0 | PDR[0]: | 2 RO |
+ + + +
PAR[0]:
PAR[0] = 0, because at line 1675 a = 0 PDR[0] =
(nt - 1) << 8) | R0
= 2<<8 | R0
All other PARs and PDRs are cleared by lines 1694–1696.
Programming Homework Help Solutions
Why is “a-128” stored in the prototype segment for the stack? Explain your answer by showing how the virtual address 0177777 is
translated to a physical address.
At the point where “a-128” is written into PAR[7], “a” equals the combined sizes of the u area, data, bss and stack. A contiguous
region of physical memory (“a” blocks in size) is allocated to hold these components of the process.
+ +
| stack |
+ +
| data+bss |
+ +
| u area |
+ +
a blocks in size
Dividing the VA 0177777 into its constituent fields, APF:block number:block offset yields 7:127:63. Translation of this VA selects
PAR[7] which holds “a-128”. Added to this number is the block number, 127, resulting in physical block number “a-1”. The physical
address refernced is therefore “a-1”:63. But since the chunk of physical memory allocated was of size “a” blocks, this precisely refers
to the last byte (byte 63) of the last block (block “a-1”). This is where the first byte of the stack is located.
9. What happens if the processor executes the instruction “tst -(sp)”, and the user stack pointer falls below the stack segment? Write
down the names of the functions that v6 invokes in order.
A segmentation exception will result and the stack will grow (assuming free memory can be found). The following calls will be
made:
Machine generates exceptions
=> trap:
=> trap()
=> backup()
=> grow()
Then control returns back to the user process and it resumes execution where it left off, re-executing the ”tst -(sp)” instruction. The
second execution succeeds of course.
IV I/O and file systems
Why does the structure struct file exist? Why not have a file descriptor point directly to the incore inode structure, and store f offset in
it?
struct fileexists so that if two separate processes open the same file, they have their own offset pointer into it.
Programming Homework Help Solutions
11.Assume the directory “d” exists, that it is the current working directory, and that it has two entries
(including “.” and ‘”..”). If an application calls creat (“bar”, 0444), and the power fails right after the
processor completed the call wdir on line 7467, what is the state of the file system on disk? More
specifically, does the file “bar” exist on disk? Does the file “bar” show up in the directory “d” on disk?
The updated inode of directory “d” exists (because inodes are updated synchronously). The data of “d” may
not be written because v6 wrote it using bdwrite (it is a partial block). The file doesn’t exist yet, because we
haven’t gotten far enough yet into the creat call (maknode is called from line 5790).
Programming Homework Help Solutions

More Related Content

PPTX
Programming Assignment Help
PPTX
Operating System Engineering Quiz
PPTX
Computer Science Homework Help
PPTX
Operating System Assignment Help
PPTX
Computer Science Assignment Help
PPTX
Operating System Assignment Help
PPTX
Programming Assignment Help
PPTX
C Programming Homework Help
Programming Assignment Help
Operating System Engineering Quiz
Computer Science Homework Help
Operating System Assignment Help
Computer Science Assignment Help
Operating System Assignment Help
Programming Assignment Help
C Programming Homework Help

What's hot (20)

PPTX
Computational Assignment Help
PDF
Ownership System in Rust
PDF
Effective Modern C++ - Item 35 & 36
PDF
Datastage real time scenario
PDF
Use C++ to Manipulate mozSettings in Gecko
PDF
Protocol handler in Gecko
PPTX
Python programing
PDF
Refactor case study LAN example
PPTX
Dynamic Memory allocation
PDF
Vb.net ii
PDF
Introduction to python
PDF
DWARF Data Representation
ODP
ocelot
PPT
Homework solutionsch8
PDF
LLVM Register Allocation (2nd Version)
PDF
Csharp_Chap13
PPTX
PDF
Java Performance Puzzlers
PPTX
Concurrency
Computational Assignment Help
Ownership System in Rust
Effective Modern C++ - Item 35 & 36
Datastage real time scenario
Use C++ to Manipulate mozSettings in Gecko
Protocol handler in Gecko
Python programing
Refactor case study LAN example
Dynamic Memory allocation
Vb.net ii
Introduction to python
DWARF Data Representation
ocelot
Homework solutionsch8
LLVM Register Allocation (2nd Version)
Csharp_Chap13
Java Performance Puzzlers
Concurrency
Ad

Similar to Operating System Engineering (20)

PPTX
General Purpose Computing using Graphics Hardware
PPT
Pipelining and co processor.
PPT
Threaded Programming
PDF
Sayeh extension(v23)
PDF
MultiThreading-in-system-and-android-logcat-42-.pdf
PDF
May2010 hex-core-opt
PPT
x86_1.ppt
PDF
8 bit Microprocessor with Single Vectored Interrupt
PPT
Writing Metasploit Plugins
PPTX
PPT
pipeline and vector processing
PPT
other-architectures.ppt
PPT
[CCC-28c3] Post Memory Corruption Memory Analysis
PDF
Buffer overflow tutorial
PDF
Low Level Exploits
PDF
Joblib: Lightweight pipelining for parallel jobs (v2)
PDF
Workshop "Can my .NET application use less CPU / RAM?", Yevhen Tatarynov
PDF
Assembly programming
PDF
Performance tweaks and tools for Linux (Joe Damato)
PDF
Buffer overflow attack
General Purpose Computing using Graphics Hardware
Pipelining and co processor.
Threaded Programming
Sayeh extension(v23)
MultiThreading-in-system-and-android-logcat-42-.pdf
May2010 hex-core-opt
x86_1.ppt
8 bit Microprocessor with Single Vectored Interrupt
Writing Metasploit Plugins
pipeline and vector processing
other-architectures.ppt
[CCC-28c3] Post Memory Corruption Memory Analysis
Buffer overflow tutorial
Low Level Exploits
Joblib: Lightweight pipelining for parallel jobs (v2)
Workshop "Can my .NET application use less CPU / RAM?", Yevhen Tatarynov
Assembly programming
Performance tweaks and tools for Linux (Joe Damato)
Buffer overflow attack
Ad

More from Programming Homework Help (20)

PPTX
Data Structures and Algorithm: Sample Problems with Solution
PPTX
Seasonal Decomposition of Time Series Data
PPTX
Solving Haskell Assignment: Engaging Challenges and Solutions for University ...
PPTX
Exploring Control Flow: Harnessing While Loops in Python
PPTX
Java Assignment Sample: Building Software with Objects, Graphics, Containers,...
PPTX
C Assignment Help
PPTX
Python Question - Python Assignment Help
PPTX
Best Algorithms Assignment Help
PPTX
Design and Analysis of Algorithms Assignment Help
PPTX
Algorithm Homework Help
PPTX
programminghomeworkhelp.com_Advanced Algorithms Homework Help.pptx
PPTX
Algorithm Homework Help
PPTX
Algorithms Design Assignment Help
PPTX
Algorithms Design Homework Help
PPTX
Algorithm Assignment Help
PPTX
Algorithm Homework Help
PPTX
C Homework Help
PPTX
C Homework Help
PPTX
Algorithm Assignment Help
PPTX
Algorithm Homework Help
Data Structures and Algorithm: Sample Problems with Solution
Seasonal Decomposition of Time Series Data
Solving Haskell Assignment: Engaging Challenges and Solutions for University ...
Exploring Control Flow: Harnessing While Loops in Python
Java Assignment Sample: Building Software with Objects, Graphics, Containers,...
C Assignment Help
Python Question - Python Assignment Help
Best Algorithms Assignment Help
Design and Analysis of Algorithms Assignment Help
Algorithm Homework Help
programminghomeworkhelp.com_Advanced Algorithms Homework Help.pptx
Algorithm Homework Help
Algorithms Design Assignment Help
Algorithms Design Homework Help
Algorithm Assignment Help
Algorithm Homework Help
C Homework Help
C Homework Help
Algorithm Assignment Help
Algorithm Homework Help

Recently uploaded (20)

PPTX
NOI Hackathon - Summer Edition - GreenThumber.pptx
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
Module 3: Health Systems Tutorial Slides S2 2025
PPTX
Nursing Management of Patients with Disorders of Ear, Nose, and Throat (ENT) ...
PDF
English Language Teaching from Post-.pdf
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PPTX
Onica Farming 24rsclub profitable farm business
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PDF
Electrolyte Disturbances and Fluid Management A clinical and physiological ap...
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
Cell Structure & Organelles in detailed.
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
PDF
Business Ethics Teaching Materials for college
PPTX
Open Quiz Monsoon Mind Game Prelims.pptx
PPTX
The Healthy Child – Unit II | Child Health Nursing I | B.Sc Nursing 5th Semester
PPTX
Open Quiz Monsoon Mind Game Final Set.pptx
PPTX
COMPUTERS AS DATA ANALYSIS IN PRECLINICAL DEVELOPMENT.pptx
NOI Hackathon - Summer Edition - GreenThumber.pptx
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Pharmacology of Heart Failure /Pharmacotherapy of CHF
Module 3: Health Systems Tutorial Slides S2 2025
Nursing Management of Patients with Disorders of Ear, Nose, and Throat (ENT) ...
English Language Teaching from Post-.pdf
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
STATICS OF THE RIGID BODIES Hibbelers.pdf
O5-L3 Freight Transport Ops (International) V1.pdf
Onica Farming 24rsclub profitable farm business
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
Electrolyte Disturbances and Fluid Management A clinical and physiological ap...
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Cell Structure & Organelles in detailed.
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
Business Ethics Teaching Materials for college
Open Quiz Monsoon Mind Game Prelims.pptx
The Healthy Child – Unit II | Child Health Nursing I | B.Sc Nursing 5th Semester
Open Quiz Monsoon Mind Game Final Set.pptx
COMPUTERS AS DATA ANALYSIS IN PRECLINICAL DEVELOPMENT.pptx

Operating System Engineering

  • 1. Operating System Engineering Programming Homework Help Solutions For any help regarding Programming Homework Help visit : https://www.programminghomeworkhelp.com/ , Email - [email protected] or call us at - +1 678 648 4277
  • 2. I Traps/Interrupts 1.Draw a picture of the kernel stack after the following events have happened: (1) the icode program has called the exec system call; and (2) a clock interrupt handler has interrupted exec() at line 3027; and (3) the clock handler just finished executing line 3739? For each entry on the stack describe what that entry represents. You may ignore local variables. The kernel stack starts off empty. A system call must be the first thing on a trap frame at this point — if any interrupts happened before, they would not have had any other process to switch to on the return path. in trap in trap in trap1 in exec CLOCK interrupt in clock PSW from icode PC of icode’s SYS instruction r0 of icode PSW after trap (br7 + 6) r1 of icode SP of icode masked PSW after trap (6) return address for call1 return (line 786) saved r5 saved r4 saved r3 saved r2 &cret &exec (an argument to trap1) return address in trap (line 2772) saved r5/r4/r3/r2 + &cret return address in trap1 (line 2848) saved r5/r4/r3/r2 + &cret PSW from exec PC from exec (line 3027) r0 from exec PSW after interrupt (br6) r1 from exec sp (same as sp now) masked PSW return address in trap (line 800) saved r5/r4/r3/r2 + &cret Programming Homework Help Solutions
  • 3. 2. Which kernel stack is the one you drew in response to question 1? Kernel stack 0? Kernel stack 1? Kernel Stack 1 is used. Process 1 (icode) was executing at the time of the trap and so its kernel stack is used. If the machine is already in kernel mode when an interrupt happens, the current kernel stack is used. 3. Can another clock interrupt interrupt the handler at line 3739? At line 3770? At line 3739, another clock interrupt can not interrupt the handler: the priority of the processor has been set to 6 already as a result of line 534 (or 535). At line 3770, the interrupt handler has lowered the priority level to 5 so another clock interrupt (at level 6) could interrupt the handler at this point. 4. Estimate how large a kernel stack must be to handle recursive traps and interrupts correctly? The kernel stack must be able to hold sufficient stack and trap frames for the most recursive case. This occurs if a process executes a system call, receives a priority 4 interrupt, followed by a priority 5 interrupt, followed by a priority 6 interrupt, followed by a re-entrant priority 6 interrupt. In addition to the size of the trap frame (i.e. the arguments to trap), you would need to consider stack frames generated by the deepest system call procedure call path (e.g. open calls namei which calls . . . ; this is probably not too deep but might change as the kernel evolved), the deepest interrupt 4 handler call path, etc. From the figure, we can see that a system call trap requires 20 stack elements for the trap frame and stack frames for the trap dispatch code (plus some extra for locals). Similarly, a non-syscall trap requires 8 stack elements for the trap frame. Assume that the maximum call depth for a function in the kernel is 4, where each stack frame requires 6 stack elements (5 from csav, and an average of 1 argument). This gives a maximum depth of approximately Programming Homework Help Solutions
  • 4. . Since each stack entry is two bytes, this gives a lower bound of 344 bytes. Of course, some additional room will be needed to account for local variables, which were ignored for this problem. II Coordinating threads 5.What do the statements at line 2088 and line 2092 do? Line 2088 calls spl6() which sets the processor privilege level to 6. This causes all interrupts of priority less than or equal to 6 to be ignored. Line 2092 calls spl0(), lowering the privilege level back to 0. These calls are used to mark atomic sections. 6. Why are these statements needed? Give an actual sequence of events that will result in erroneous behavior if these two statements are omitted. Your sequence of events should be as concrete as possible, not merely hypothetical. Programming Homework Help Solutions
  • 5. 1.runin++ on 1954 2.scheduler calls sleep on 1955 with runin as channel 3.executes lines 2089 setting p wchan to &runin 4.processor is interrupted by clock 5.clock interrupt handler sets runin to zero (3821) 6.handler calls wakeup with &runin as argument (3822) 7.wakeup calls setrun, which sets p wchan to zero and p stat to SRUN (2139–2140) 8.handler returns 9.now scheduler sets p stat to SSLEEP(2090) 10.and calls swtch 11.scheduler will never be woken up, because p stat == SSLEEP and p wchan is zero Deadlock: 1.a user process calls indirectly bwrite(), which launches write on buffer. 2.then calls iowait, 3.which calls sleep with the address of the buffer as the channel 4.sleep sets p wchan (2089) 5.disk interrupt comes in completing the write of the buffer 6.it calls iodone, which calls wakeup on the buffer address 7.calls setrun, which sets p wchan to zero and p stat to SRUN 8.interrupt handler completes 9.process sets p stat to SSLEEP(2090) 10.and call swtch 11.process will never be woken up because p wchan is zero and p stat SSLEEP Programming Homework Help Solutions
  • 6. III Address spaces 7. Draw the prototype segmentation registers with their actual content after the call to estabur() on line 3152 has completed. Assume that w0 is 410, w1 is 129, w2 is 32, and w3 is 128 (see lines 3076 through 3082). Explain the content of the registers briefly. Converting what we are given into blocks (and hence the arguments to estabur), we get: text size is 129 bytes (w1 = 129) SSIZE (stack size) = 20 blocks ==> nt = 3 blocks ==> ns = 20 blocks data size is 160 bytes (w2 = 32, w3 = 128) ==> nd = 3 blocks USIZE = 16 blocks That is, estabur(nt = 3, nd = 3, ns = 20, sep = 0). Since each segment (8KB) contains 128 blocks, the text, data, and stack each fit within one segment: + + + + PAR[7]: | -89 | PDR[1]: | 108 ED RW | + + + + PAR[7] = USIZE + nd + ns - 128 = 16 + 3 + 20 - 128 = 39 - 128 = -89 PDR[1] = (128 - ns) << 8 | ED | RW = 108<<8 | ED | RW + + + + 2 RW | PAR[1]: | USIZE | PDR[1]: | + + + + PAR[1] = USIZE = 20 PDR[1] = (nd - 1) << 8) | RW = 2<<8 | RW + + + + | 0 | PDR[0]: | 2 RO | + + + + PAR[0]: PAR[0] = 0, because at line 1675 a = 0 PDR[0] = (nt - 1) << 8) | R0 = 2<<8 | R0 All other PARs and PDRs are cleared by lines 1694–1696. Programming Homework Help Solutions
  • 7. Why is “a-128” stored in the prototype segment for the stack? Explain your answer by showing how the virtual address 0177777 is translated to a physical address. At the point where “a-128” is written into PAR[7], “a” equals the combined sizes of the u area, data, bss and stack. A contiguous region of physical memory (“a” blocks in size) is allocated to hold these components of the process. + + | stack | + + | data+bss | + + | u area | + + a blocks in size Dividing the VA 0177777 into its constituent fields, APF:block number:block offset yields 7:127:63. Translation of this VA selects PAR[7] which holds “a-128”. Added to this number is the block number, 127, resulting in physical block number “a-1”. The physical address refernced is therefore “a-1”:63. But since the chunk of physical memory allocated was of size “a” blocks, this precisely refers to the last byte (byte 63) of the last block (block “a-1”). This is where the first byte of the stack is located. 9. What happens if the processor executes the instruction “tst -(sp)”, and the user stack pointer falls below the stack segment? Write down the names of the functions that v6 invokes in order. A segmentation exception will result and the stack will grow (assuming free memory can be found). The following calls will be made: Machine generates exceptions => trap: => trap() => backup() => grow() Then control returns back to the user process and it resumes execution where it left off, re-executing the ”tst -(sp)” instruction. The second execution succeeds of course. IV I/O and file systems Why does the structure struct file exist? Why not have a file descriptor point directly to the incore inode structure, and store f offset in it? struct fileexists so that if two separate processes open the same file, they have their own offset pointer into it. Programming Homework Help Solutions
  • 8. 11.Assume the directory “d” exists, that it is the current working directory, and that it has two entries (including “.” and ‘”..”). If an application calls creat (“bar”, 0444), and the power fails right after the processor completed the call wdir on line 7467, what is the state of the file system on disk? More specifically, does the file “bar” exist on disk? Does the file “bar” show up in the directory “d” on disk? The updated inode of directory “d” exists (because inodes are updated synchronously). The data of “d” may not be written because v6 wrote it using bdwrite (it is a partial block). The file doesn’t exist yet, because we haven’t gotten far enough yet into the creat call (maknode is called from line 5790). Programming Homework Help Solutions