Write a C program to be executed in Unix environment. It takes three command line arguments
with the following information:
• The type of the page table. Only two values 1 and 2 can be accepted. 1 means single-level
linear page table and 2 means two-level tree-structured page table.
• The total number of bits in the binary format of the memory address. This can be an integer
in the range [8..63].
• The page size in terms of the number of KB (1024 Bytes). This can be 1, 2, 4, 8, 16, 32,
64, 128, 256, 512.
If the given three arguments are not consistent with each other, your program will terminate with
an error message. The error message should include an explanation why the arguments cannot be
accepted. For example, (1, 10, 2) cannot be accepted because with 10-bit address, the memory size
is 1 KB, so it is impossible to have a page of size 2 KB.
If the given three arguments are consistent, your program should give the following output (in
decimal):
• the size of the memory in terms of the number of bytes, the number of KB, the number of
MB, or the number of GB, whichever is the most appropriate.
• the total number of pages
• the total number of page table entries
• the size of the page table in terms of the number of bytes
• the total number of bits in an address for the VPN
• the total number of bits in an address for the offset within a page
• the total number of page table entries in a page of a page table (type 2 only)
• the total number of pages in a page table (type 2 only)
• the total number of bits in an address for the page directory index (type 2 only)
• the total number of bits in an address for the page table index (type 2 only)
After the output of the above data, your program should repeatedly prompt the user to input a
decimal virtual address and output the related information (including any error messages).
If the input address is not consistent with the command line arguments, your program should print
an error message and prompt the user for the next input of the virtual address. The error message
should include an explanation why the input cannot be accepted. For example, with 10-bit address,
an input of virtual address 12345 cannot be accepted because the memory size is only 1 KB.
If the input address is consistent with the command line arguments, your program should provide
the following output:
• the VPN of the input address in decimal format
• the page offset of the input address in decimal format
• the page directory index of the input address in decimal format (type 2 only)
• the page table index of the input address in decimal format (type 2 only)
• the input address in binary format
• the VPN of the input address in binary format
• the page offset of the input address in binary format
• the page directory index of the input address in binary format (type 2 only)
• the page table index of the input address in binary format (type 2 only)
Note that the numbers in binary format should include zeros at the beginning if necessary. After
the above output, the program should prompt the user for the next input of the virtual address.
Sample IO for testing:
INPUT
command line arguments 2 32 8
OUTPUT
size of the memory 4GB
total number of pages 524288
total number of PTE (page table entries) 524288
size of page table 2097152
number of bits for VPN 19
number of bits for page offset 13
number of PTE in a page of page table 2048
number of pages in a page table 256
number of bits for page directory index 8
number of bits for page table index 11
INPUT
decimal virtual address 1234567890
OUTPUT
VPN of the address in decimal 150704
page offset of the address in decimal 722
page directory index in decimal 73
page table index in decimal 1200
the input address in binary 01001001100101100000001011010010
VPN of the address in binary 0100100110010110000
page offset of the address in binary 0001011010010
page directory index in binary 01001001
page table index in binary 10010110000
INPUT
decimal virtual address 2345678901
OUTPUT
VPN of the address in decimal 286337
page offset of the address in decimal 6197
page directory index in decimal 139
page table index in decimal 1665
the input address in binary 10001011110100000011100000110101
VPN of the address in binary 1000101111010000001
page offset of the address in binary 1100000110101
page directory index in binary 10001011
page table index in binary 11010000001
유닉스 환경에서 실행할 C 프로그램을 작성합니다. 세 개의 명령줄 인수가 필요합니다.와 함께 다음 정보가 필요합니다:- 페이지 테이블의 유형. 1과 2 두 값만 사용할 수 있습니다. 1은 단일 레벨선형 페이지 테이블을 의미하고 2는 2레벨 트리 구조의 페이지 테이블을 의미합니다.- 메모리 주소의 이진 형식의 총 비트 수입니다. 이것은 정수일 수 있습니다.8..63] 범위의 정수일 수 있습니다.- KB(1024바이트) 단위의 페이지 크기입니다. 1, 2, 4, 8, 16, 32가 될 수 있습니다,64, 128, 256, 512.주어진 세 개의 인수가 서로 일치하지 않으면 프로그램이 오류 메시지와 함께 종료됩니다.오류 메시지가 표시됩니다. 오류 메시지에는 인수를 사용할 수 없는 이유에 대한 설명이 포함되어야 합니다.허용되지 않습니다. 예를 들어, (1, 10, 2)는 10비트 주소의 메모리 크기가 1KB이므로 허용할 수 없습니다.가 1KB이므로 2KB 크기의 페이지를 가질 수 없습니다.주어진 세 개의 인자가 일관되면 프로그램은 다음과 같은 출력을 제공해야 합니다(십진수):- 바이트 수 측면에서 메모리 크기, KB 수, KB 수, MB 또는 GB 수MB 또는 GB 수 중 가장 적절한 값을 출력해야 합니다.- 총 페이지 수- 페이지 테이블 항목의 총 개수- 페이지 테이블의 크기(바이트 수 기준)- VPN 주소의 총 비트 수- 페이지 내 오프셋에 대한 주소의 총 비트 수- 페이지 테이블의 한 페이지에 있는 총 페이지 테이블 항목 수(유형 2만 해당)- 페이지 테이블의 총 페이지 수(유형 2만 해당)- 페이지 디렉토리 인덱스 주소의 총 비트 수(유형 2만 해당)- 페이지 테이블 인덱스 주소의 총 비트 수(유형 2만 해당)위의 데이터를 출력한 후, 프로그램은 사용자에게 10진수 가상 주소를 입력하라는 메시지를 반복해서 표시해야 합니다.십진수 가상 주소를 입력하라는 메시지를 반복해서 표시하고 관련 정보(오류 메시지 포함)를 출력해야 합니다.입력 주소가 명령줄 인수와 일치하지 않으면 프로그램에서 오류 메시지를 출력하고오류 메시지를 출력하고 사용자에게 다음에 가상 주소를 입력하라는 메시지를 표시해야 합니다. 오류 메시지에는 입력을 수락할 수 없는 이유에 대한 설명이 포함되어야 합니다. 예를 들어 10비트 주소의 경우메모리 크기가 1KB에 불과하므로 가상 주소 12345의 입력을 수락할 수 없습니다.입력 주소가 명령줄 인수와 일치하는 경우 프로그램은 다음과 같은 출력을 제공해야 합니다.다음 출력을 제공해야 합니다:- 십진수 형식의 입력 주소의 VPN- 입력 주소의 페이지 오프셋(십진수 형식)- 입력 주소의 페이지 디렉토리 인덱스(십진수 형식)(유형 2만 해당)- 입력 주소의 페이지 테이블 인덱스가 십진수 형식으로 표시됩니다(유형 2만 해당).- 이진 형식의 입력 주소- 이진 형식의 입력 주소의 VPN- 이진 형식의 입력 주소의 페이지 오프셋- 이진 형식의 입력 주소의 페이지 디렉토리 색인(유형 2만 해당)- 이진 형식의 입력 주소의 페이지 테이블 인덱스(유형 2만 해당)이진 형식의 숫자는 필요한 경우 처음에 0을 포함해야 합니다. 이후위의 출력이 끝나면 프로그램은 사용자에게 가상 주소의 다음 입력을 요청하는 메시지를 표시해야 합니다.테스트용 샘플 IO입니다:INPUT명령줄 인수 2 32 8OUTPUT메모리 크기 4GB총 페이지 수 524288총 PTE(페이지 테이블 항목) 수 524288페이지 테이블 크기 2097152VPN용 비트 수 19페이지 오프셋의 비트 수 13페이지 테이블의 페이지 내 PTE 수 2048페이지 테이블의 페이지 수 256페이지 디렉터리 인덱스의 비트 수 8페이지 테이블 인덱스의 비트 수 11입력십진수 가상 주소 1234567890OUTPUT십진수 주소의 VPN 150704주소의 페이지 오프셋 소수점 722페이지 디렉터리 인덱스 소수점 73페이지 테이블 인덱스 십진수 1200입력 주소의 이진 01001001100101100000001011010010바이너리 주소의 VPN 0100100110010110000이진 주소의 페이지 오프셋 0001011010010바이너리 01001001의 페이지 디렉토리 인덱스바이너리 10010110000의 페이지 테이블 인덱스입력10진수 가상 주소 2345678901OUTPUT십진수 주소의 VPN 286337주소의 페이지 오프셋 소수점 6197페이지 디렉터리 색인 십진수 139페이지 테이블 인덱스 1665이진 10001011110100000011100000110101의 입력 주소바이너리 주소의 VPN 1000101111010000001바이너리 주소의 페이지 오프셋 1100000110101바이너리 10001011의 페이지 디렉토리 인덱스바이너리 11010000001의 페이지 테이블 인덱스