Consider the following multi-threaded code segment (in a mix of C and pseudocode), invoked by two processes P1 and P2, and each of the processes spawns two threads T1 and T2:
int x = 0; // global
Lock L1; // global
main() {
create a thread to execute foo(); // Thread T1
create a thread to execute foo(); // Thread T2
wait for the two threads to finish execution;
print (x);}
foo() {
int y = 0;
Acquire L1;
x = x + 1;
y = y + 1;
Release L1;
print (y); }
Which of the following statement(s) is/are correct ?
Consider a three-level page table to translate a 39-bit virtual address to a physical address as shown below.
The page size is 4 KB (1 KB = 210 bytes) and page table entry size at every level is 8 bytes. A process P is currently using 2 GB (1 GB = 230 bytes) virtual memory which is mapped to 2 GB of physical memory. The minimum amount of memory required for the page table of P across all levels is _______ KB.
Consider the following ANSI C function:
int SomeFunction (int x, int y)
{
if ( (x == 1) I I (y == 1)) return 1;
if (x == y) return x;
if (x > y) return SomeFunction(x - y, y);
if (y > x) return SomeFunction(x, y - x);
}
The value returned by SomeFunction(15, 255) is _______.
Consider the following ANSI C program:
#include <stdio.h>
#include <stdlib.h>
struct Node{
int value;
struct Node ⋆next;};
int main(){
struct Node ⋆boxE, ⋆head, ⋆boxN; int index = 0;
boxE = head = (struct Node ⋆) malloc (sizeof(struct Node));
head -> value = index;
for (index = 1; index <=3; index++){
boxN = (struct Node ⋆) malloc(sizeof(struct Node));
boxE -> next = boxN;
boxN -> value = index;
boxE = boxN; }
for (index = 0; index <= 3; index++) {
printf("value at index %d is %d\m", index, head -> value);
head = head -> next;
printf("value at index %d is %d\n", index + 1, head -> value);}}
Which one of the statement below is correct about the program ?