[Pintos-Kaist] Project3 - Anonymous Page
·
운영체제
이전 포스트에서는 프로젝트 3의 Memory Management부분에 대해 구현을 했습니다. 마지막 부분에 해당하는 vm_alloc_page_with_initializer라는 함수를 시작으로 나머지 Anonymous Page를 구현 시작해 보도록 하겠습니다. ✔️ Anonymous Page란? Anonymous 페이지는 파일 기반 페이지와 달리 이름이 지정된 파일 소스가 없기 때문에 Anonymous page라고 부릅니다. Anonymous 페이지는 스택 및 힙과 같은 실행 파일에 사용됩니다. Anonymous 페이지는 프로그램이 실행되는 동안 필요한 메모리 공간을 동적으로 할당하여 프로그램의 요구에 맞게 메모리를 사용할 수 있습니다. Anonymous 페이지는 가상 메모리 공간에서 실제 메모리로 데이터..
[Pintos-Kaist] Project3 - Memory Management
·
운영체제
핀토스 프로젝트 3에서는 Virtual Memory에 관한 내용들을 토대로 구현을 시작합니다. 우선 첫 번째 구현 요소인 Memory Management에 대해서 알아보겠습니다. Memory Management 가상 메모리 시스템을 지원하려면 가상 페이지와 물리적 프레임을 효과적으로 관리해야 합니다. 즉, 어떤 (가상 또는 물리적) 메모리 영역이 어떤 목적으로, 누가, 어떤 용도로 사용되고 있는지 등을 추적해야 합니다. 먼저 보충 페이지 테이블을 다룬 다음 물리적 프레임을 다룰 것입니다. 이해를 돕기 위해 가상 페이지에는 '페이지'라는 용어를, 물리적 페이지에는 '프레임'이라는 용어를 사용한다는 점에 유의하세요. Struct page struct page에 hash_elem 멤버를 추가해서 해당 페이지를..
[Pintos-Kaist] Project2 - System Call(4) - (exec, fork, wait)
·
운영체제
지난 시스템 콜 기능 구현 포스트에서는 exec, fork, wait을 제외한 기능들을 구현했습니다. 관련 내용은 아래 포스트 참고하시길 바랍니다. https://yunchan97.tistory.com/73 [Pintos-Kaist] Project2 - System Call(3) -(write, putbuf, open, process_add_file, process_get_file, read, filesize, seek, tell, 지난 포스트에서는 전체적인 코드의 흐름을 파악하는 과정을 봤습니다. 아래 포스트에 이어서 다음 기능을 구현해보겠습니다. https://yunchan97.tistory.com/71 [Pintos-Kaist] Project2 - System Call(1) - (halt, exit..
[Pintos-Kaist] Project2 - System Call(3) - (write, putbuf, open, process_add_file, process_get_file, read, filesize, seek, tell, close)
·
운영체제
지난 포스트에서는 전체적인 코드의 흐름을 파악하는 과정을 봤습니다. 아래 포스트에 이어서 다음 기능을 구현해 보겠습니다. https://yunchan97.tistory.com/71 [Pintos-Kaist] Project2 - System Call(1) - (halt, exit, create, remove) 과제 목표 시스템 콜 핸들러 및 시스템 콜(halt, exit, create, remove) 구현 과제 설명 핀토스는 시스템 콜 핸들러가 구현되어 있지 않아 시스템 콜이 처리되지 않음. 핀토스의 시스템 콜 메커니즘을 이 yunchan97.tistory.com 구현 순서는 Gitbook 순서를 바탕으로 진행하는데 중간중간 필요한 부분이 있다면 구현하는 방식으로 진행합니다. 구현 1️⃣ int write..
[Pintos-Kaist] Project2 - System Call(2) - System Call Flow
·
운영체제
지난 Project1 thread를 활용한 과제부터 System call이라는 Project2를 진행하면서 코드들이 점차 많아지면서 전반적인 코드의 흐름을 짚고 가야 할 필요를 느껴서 이번에는 전체적인 코드의 흐름을 다시 잡고 가는 과정을 추가했습니다. 코드의 흐름 init.c → int main(void) → run_actions(argv) → run_task(char **argv) → process_create_initd(task) → thread_create (file_name, PRI_DEFAULT, initd, fn_copy) → initd→process_exec → load, do_iret -> syscall_handler() 전반적인 코드의 흐름은 위와 같고 위 순서대로 분석을 해봅시다. 1..
[Pintos-Kaist] Project2 - System Call(1) - (halt, exit, create, remove)
·
운영체제
과제 목표 시스템 콜 핸들러 및 시스템 콜(halt, exit, create, remove) 구현 과제 설명 핀토스는 시스템 콜 핸들러가 구현되어 있지 않아 시스템 콜이 처리되지 않음. 핀토스의 시스템 콜 메커니즘을 이해하고 시스템 콜 핸들러를 구현한다. 시스템 콜(halt, exit, createm remove)을 구현하고 시스템 콜 핸들러를 통해 호출한다. 💡 시스템 콜 시스템 콜은 운영 체제가 제공하는 서비스에 대한 프로그래밍 인터페이스입니다. 시스템 콜은 커널모드에서 실행되고, 처리 후 사용자 모드로 복귀됩니다. 시스템 콜의 핵심은 시스템 콜 호출 시, 하드웨어 인터럽트가 발생하여 실행모드 의 우선순위가 특수모드로 상향조정 되는 것입니다. 유저 프로그램에서 write() 함수를 호출한다. writ..
[백준] 14940 쉬운 최단거리 [python]
·
알고리즘/백준
문제 풀이 1️⃣ 목표지점 2를 찾아서 위치를 저장해둡니다. 2️⃣ 1의 값들을 전부 -1로 바꿔줍니다. 3️⃣ 찾아놓은 목표지점 위치부터 시작해서 bfs 그래프 너비 탐색을 통해서 이동할 수 있는 부분들을 탐색합니다. 4️⃣ 전체 탐색하고 탐색하지 못한부분은 -1로 그대로놔둡니다. 5️⃣ arr에 저장되어있는 값을 출력형식에 맞게 출력합니다. 전체 코드 from sys import stdin as s from collections import deque s=open('input.txt','rt') # bfs 함수부분 def bfs(si,sj): q=deque() q.append((si,sj)) v[si][sj]=1 # 4방향 탐색위한 방향설정 dx=[0,1,0,-1] dy=[1,0,-1,0] while..
[Pintos-Kaist] Project2 - Argument Passing
·
운영체제
과제 목표 Command line Parsing 기능 구현 과제 설명 Pintos는 프로그램과 인자를 구분하지 못하는 구조로 되어있습니다. ex) /bin/ls -l foo bar 의 경우 null 포인터를 인식하지못하고 문자열 전체로 인식. 명령어를 널포인터 기준으로 단어를 분할해서 /bin/ls, -l, foo, bar로 나눠서 스택에 푸시한다. 스택에 저장된 인자를 응용 프로그램에 전달하는 기능을 구현합니다. 수정 부분 process_create_initd() 함수에서 프로그램을 실행 할 프로세스를 생성합니다. process_exec() 함수에서 프로그램을 메모리에 탑재하고 응용 프로그램을 실행합니다. argument_stack() 함수에서 함수 호출 규약에 따라 유저 스택에 프로그램 이름과 인자들..
yunchan^.^
'분류 전체보기' 카테고리의 글 목록 (4 Page)