운영체제
-
지난 포스트에서는 전체적인 코드의 흐름을 파악하는 과정을 봤습니다. 아래 포스트에 이어서 다음 기능을 구현해 보겠습니다. 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(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..
2023.06.08 -
지난 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(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..
2023.06.07 -
과제 목표 시스템 콜 핸들러 및 시스템 콜(halt, exit, create, remove) 구현 과제 설명 핀토스는 시스템 콜 핸들러가 구현되어 있지 않아 시스템 콜이 처리되지 않음. 핀토스의 시스템 콜 메커니즘을 이해하고 시스템 콜 핸들러를 구현한다. 시스템 콜(halt, exit, createm remove)을 구현하고 시스템 콜 핸들러를 통해 호출한다. 💡 시스템 콜 시스템 콜은 운영 체제가 제공하는 서비스에 대한 프로그래밍 인터페이스입니다. 시스템 콜은 커널모드에서 실행되고, 처리 후 사용자 모드로 복귀됩니다. 시스템 콜의 핵심은 시스템 콜 호출 시, 하드웨어 인터럽트가 발생하여 실행모드 의 우선순위가 특수모드로 상향조정 되는 것입니다. 유저 프로그램에서 write() 함수를 호출한다. writ..
[Pintos-Kaist] Project2 - System Call(1) - (halt, exit, create, remove)과제 목표 시스템 콜 핸들러 및 시스템 콜(halt, exit, create, remove) 구현 과제 설명 핀토스는 시스템 콜 핸들러가 구현되어 있지 않아 시스템 콜이 처리되지 않음. 핀토스의 시스템 콜 메커니즘을 이해하고 시스템 콜 핸들러를 구현한다. 시스템 콜(halt, exit, createm remove)을 구현하고 시스템 콜 핸들러를 통해 호출한다. 💡 시스템 콜 시스템 콜은 운영 체제가 제공하는 서비스에 대한 프로그래밍 인터페이스입니다. 시스템 콜은 커널모드에서 실행되고, 처리 후 사용자 모드로 복귀됩니다. 시스템 콜의 핵심은 시스템 콜 호출 시, 하드웨어 인터럽트가 발생하여 실행모드 의 우선순위가 특수모드로 상향조정 되는 것입니다. 유저 프로그램에서 write() 함수를 호출한다. writ..
2023.06.06 -
과제 목표 Command line Parsing 기능 구현 과제 설명 Pintos는 프로그램과 인자를 구분하지 못하는 구조로 되어있습니다. ex) /bin/ls -l foo bar 의 경우 null 포인터를 인식하지못하고 문자열 전체로 인식. 명령어를 널포인터 기준으로 단어를 분할해서 /bin/ls, -l, foo, bar로 나눠서 스택에 푸시한다. 스택에 저장된 인자를 응용 프로그램에 전달하는 기능을 구현합니다. 수정 부분 process_create_initd() 함수에서 프로그램을 실행 할 프로세스를 생성합니다. process_exec() 함수에서 프로그램을 메모리에 탑재하고 응용 프로그램을 실행합니다. argument_stack() 함수에서 함수 호출 규약에 따라 유저 스택에 프로그램 이름과 인자들..
[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() 함수에서 함수 호출 규약에 따라 유저 스택에 프로그램 이름과 인자들..
2023.06.05 -
운영체제의 동작 과정 (Dual-Mode Execution) - 운영체제는 기본적으로 사용자에게 인터페이스를 제공하는 User Mode와 기기들을 직접 관리하는 Kernel Mode로 구분된다. User Mode : 일반적인 응용프로그램이 구동되는 환경이다. Kernel Mode : 커널이 구동되는 환경이며, 이 모드에서는 OS 시스템에 영향을 주는 명령어를 실행할 수 있다. - Kernel에서의 작업은 컴퓨터의 중요한 부분에 해당하는 작업이기에 사용자가 직접 작업하다가 문제가 생길 시 컴퓨터 전체에 영향을 끼치기 때문에 User Mode와 Kernel Mode로 나눠 사용자가 접근하지 못하게 한다. - 처음 운영체제가 구동되면 초기화 작업 및 부팅 과정에서 필요한 과정들을 수행하기 위해 커널 모드로 시..
[운영체제] 인터럽트 & 시스템 콜(Interrupt, System Call)운영체제의 동작 과정 (Dual-Mode Execution) - 운영체제는 기본적으로 사용자에게 인터페이스를 제공하는 User Mode와 기기들을 직접 관리하는 Kernel Mode로 구분된다. User Mode : 일반적인 응용프로그램이 구동되는 환경이다. Kernel Mode : 커널이 구동되는 환경이며, 이 모드에서는 OS 시스템에 영향을 주는 명령어를 실행할 수 있다. - Kernel에서의 작업은 컴퓨터의 중요한 부분에 해당하는 작업이기에 사용자가 직접 작업하다가 문제가 생길 시 컴퓨터 전체에 영향을 끼치기 때문에 User Mode와 Kernel Mode로 나눠 사용자가 접근하지 못하게 한다. - 처음 운영체제가 구동되면 초기화 작업 및 부팅 과정에서 필요한 과정들을 수행하기 위해 커널 모드로 시..
2023.06.02 -
💡Pintos_8팀 WIL 일별 진행 목록 23.05.26(금) - github team repository 생성 - git clone 후 - AWS환경에서의 Ubuntu18.04 환경설정 23.05.27(토) - Alarm Clock🕰️ 구현 시작 - 목표 : 호출한 프로세스를 정해진 시간 이후에 다시 시작하는 커널 내부 함수 구현 - Busy waiting -> sleep, awake - 쓰레드 디스크립터 필드 추가(wakeup_tick) - 전역 변수 추가(next_tick_to_awake) - thread_init() 함수 수정 - timer_sleep() 함수 수정 23.05.29(월) - thread_sleep() 함수 구현 - timer_interrupt() 함수 수정 - thread_awa..
[Pintos-Kaist] Project 1 - Threads 1주차 학습💡Pintos_8팀 WIL 일별 진행 목록 23.05.26(금) - github team repository 생성 - git clone 후 - AWS환경에서의 Ubuntu18.04 환경설정 23.05.27(토) - Alarm Clock🕰️ 구현 시작 - 목표 : 호출한 프로세스를 정해진 시간 이후에 다시 시작하는 커널 내부 함수 구현 - Busy waiting -> sleep, awake - 쓰레드 디스크립터 필드 추가(wakeup_tick) - 전역 변수 추가(next_tick_to_awake) - thread_init() 함수 수정 - timer_sleep() 함수 수정 23.05.29(월) - thread_sleep() 함수 구현 - timer_interrupt() 함수 수정 - thread_awa..
2023.06.02 -
✔️ 동기화(Synchronization)란? - 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것을 의미합니다. ✔️ 동기화의 목적 상호배제(Mutual Exclusion) 스레드 간의 순서 보장(Ordering) 효율적인 통신과 협력(Cooperation) - 일반적으로 뮤텍스, 세마포어, 조건 변수, 원자적 연산 등의 기법과 동기화 객체를 활용하여 스레드 간의 안전한 상호작용과 동기화된 실행을 달성할 수 있습니다. 이러한 동기화 메커니즘을 적절히 사용하여 스레드 동기화를 구현하면 경쟁 조건과 데드락(Deadlock), 스레드 간의 충돌 등의 문제를 예방하고 안정적인 다중 스레드 프로그래밍을 구현할 수 있습니다. ✔️ 임계 영역(Critical Section)이란? - 공유 ..
[운영체제] 스핀락(Spinlock),뮤텍스(Mutex),세마포어(Semaphore)✔️ 동기화(Synchronization)란? - 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것을 의미합니다. ✔️ 동기화의 목적 상호배제(Mutual Exclusion) 스레드 간의 순서 보장(Ordering) 효율적인 통신과 협력(Cooperation) - 일반적으로 뮤텍스, 세마포어, 조건 변수, 원자적 연산 등의 기법과 동기화 객체를 활용하여 스레드 간의 안전한 상호작용과 동기화된 실행을 달성할 수 있습니다. 이러한 동기화 메커니즘을 적절히 사용하여 스레드 동기화를 구현하면 경쟁 조건과 데드락(Deadlock), 스레드 간의 충돌 등의 문제를 예방하고 안정적인 다중 스레드 프로그래밍을 구현할 수 있습니다. ✔️ 임계 영역(Critical Section)이란? - 공유 ..
2023.05.29 -
💡 동시성(Concurrency)이란? 동시성은 여러 작업이 동시에 실행되는 것 처럼 보이지만 실제로는 하나의 프로세스에서 여러 작업이 번갈아가면서 실행됩니다. 작업은 짧은 시간 동안 실행되고 중단되며, 다른 작업이 실행됩니다. 동시성은 작업을 빠르게 전환하여 여러 작업을 동시에 처리하는 것처럼 보이게 합니다. 이는 프로그래밍에서 비동기적인 작업이나 이벤트 기반 프로그래밍에서 주로 사용됩니다. 💡병렬성(Parallelism)이란? 병렬성은 여러 프로세서가 동시에 작업을 처리하며 여러 작업이 실제로 동시에 실행되는 개념입니다. 작업은 독립적으로 실행되며, 각각의 프로세서에서 병렬로 처리됩니다. 병렬성은 특히 대규모의 계산 작업이나 데이터 처리 작업에서 성능을 향상시키는 데 사용됩니다. 동시성 vs 병렬성 ..
[운영체제] 동시성(Concurrency)과 병렬성(Parallelism)💡 동시성(Concurrency)이란? 동시성은 여러 작업이 동시에 실행되는 것 처럼 보이지만 실제로는 하나의 프로세스에서 여러 작업이 번갈아가면서 실행됩니다. 작업은 짧은 시간 동안 실행되고 중단되며, 다른 작업이 실행됩니다. 동시성은 작업을 빠르게 전환하여 여러 작업을 동시에 처리하는 것처럼 보이게 합니다. 이는 프로그래밍에서 비동기적인 작업이나 이벤트 기반 프로그래밍에서 주로 사용됩니다. 💡병렬성(Parallelism)이란? 병렬성은 여러 프로세서가 동시에 작업을 처리하며 여러 작업이 실제로 동시에 실행되는 개념입니다. 작업은 독립적으로 실행되며, 각각의 프로세서에서 병렬로 처리됩니다. 병렬성은 특히 대규모의 계산 작업이나 데이터 처리 작업에서 성능을 향상시키는 데 사용됩니다. 동시성 vs 병렬성 ..
2023.05.27