2024/10/1714 교착 상태 1 - 교착 상태란 13장 교착상태에 대해서 공부해보려고 한다. 벌써 새벽 4시가 조금 넘었다. 이 단원만 마치고 오늘 새벽에는 어제 못한 수학 공부도 하고 아침 운동도 하려고 한다. 그러러면 2시간 안에 이 공부를 다 마쳐야 한다.동시에 실행되는 여러 프로세스는 각자가 필요한 자원을 할당받아 실행된다. 그 과정에서 때로는 프로세스들이 꼼짝도 못하고 정지해 버리는 교착 상태가 발생할 수 있다. 이번 장에서는 교착 상태란 무엇인지, 운영체제는 교착 상태를 어떻게 해결하는지에 대해 알아보겠다. 교착 상태를 해결하는 것 또한 운영체제가 맡는 중요한 임무 중 하나이다. 교착 상태란 무엇이며, 그를 표현하는 자원 할당 그래프와 교착 상태의 발생 원인을 예시를 통해 학습해볼 것이다. 이렇게 교통이 마비되어 버리면 복구되기까지 오랜 .. 2024. 10. 17. 프로세스 동기화 2 - 동기화 기법 동기화의 개념을 익혔으니 이제 동기화 기법에 대해서 공부해보려고 한다. 이제 새벽 3시가 다 되어간다. 오늘은 철야를 하며 공부해 볼 생각이다.프로세스를 동기화하지 않으면 겉보기에 아무런 문제 없어보이는 코드도 예기치 못하게 작동될 수 있다. 이번 절에서는 동기화를 위한 대표적인 도구인 뮤텍스 락, 세마포, 모니터에 대해 학습해 보겠다. 프로세스 동기화는 어떻게 이루어질까? 어떻게 해야 임계 구역에 오직 하나의 프로세스만 진입하게 하고, 올바른 실행 순서를 보장할 수 있을까? 이제 동기화를 위한 대표적인 도구인 뮤텍스 락, 세마포, 모니터에 대해 알아볼 것이다. 뮤텍스락임계 구역 문제와 이를 해결하기 위한 동기화를 옷 가게에서 탈의식을 이용하는 것에 비유해 보자. 옷 가게에서 마음에 드는 옷이 없으면.. 2024. 10. 17. 프로세스 동기화 1 - 동기화란? 12장 프로세스 동기화에 대해서 학습해보려고 한다. 동시다발적으로 실행되는 수많은 프로세스는 서로 협력하기도 하고, 자원을 두고 경쟁하기도 한다. 이번 장에서는 프로세스가 동시에 실행될 때 반드시 거쳐야 할 동기화에 대해 학습해 보겠다. 그리고 동시에 실행되는 프로세스들을 올바르게 실행하기 위해서는 무엇을 고려해야 하는지도 알아볼 것이다.운영체제의 프로세스 관리 서비스 중 가장 중요한 두 가지를 꼽자면 스케줄링과 동기화이다. 이를 동기화라고 한다. 이번 절에서는 동기화란 무엇인지 개념을 정리하고, 프로세스를 동기화하지 않을 경우 발생할 수 있는 문제들을 통해 동기화가 왜 필요한지 알아보게 될 것이다. 동기화의 의미동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고받으며 협력하며 실행될 수 있.. 2024. 10. 17. CPU 스케줄링 2 - CPU 스케줄링 알고리즘 이어서 CPU 스케줄링 알고리즘에 대해서 학습해 보겠다. 앞선 절에서 배운 개념들을 토대로 스케줄링 알고리즘에 대해서 배우게 된다. CPU 스케줄링 알고리즘의 종류는 매우 다양하고 운영체제마다 서도 다른 스케줄링 알고리즘을 사용하고 있다. 여기서 다루지 못한 스케줄링 알고리즘도 있다. 그러므로 각 스케줄링 알고리즘의 작동 방식과 장단점을 이해하는데 집중하여 학습하면 된다. 스케줄링 알고리즘의 종류여기서는 일곱가지 스케줄링 알고리즘에 대해 학습해 본다. 가령 CPU를 오래 사용하는 프로세스가 먼저 도착하면 다른 프로세스는 그 프로세스가 CPU를 사용하는 동안 무작정 기다릴 수밖에 없다.그림에서처럼 A, B, C 프로세스가 차례대로 준비 큐에 삽입된다면 프로세스 C는 고작 2ms를 실행하기 위해 .. 2024. 10. 17. CPU 스케줄링 1 - CPU 스케줄링 개요 오늘은 밤늦게까지 공부를 할 생각이다. 아직 발행할 포스트가 남아있기도 하고 공부할 내용이 많아서 몇 개는 미리 발행했다가 추후에 수정하는 방식으로 진행해 볼 것이다.모든 프로세스는 운영체제로부터 자원을 할당받는다. 프로세스마다 필요로 하는 자원은 각기 다르지만, 모든 프로세스가 공통으로 사용하는자원이 있다면 CPU이다. 운영체제가 프로세스에게 분배하는 자원 중 가장 중요한 자원은 CPU라고 볼 수 있다. 이번 시간에는 운영체제가 CPU를 어떻게 프로세스에 분배하는지 알아볼 것이다. 모든 프로세스는 CPU를 필요로 하고 먼저 CPU를 사용하고 싶어한다. 이러한 프로세스들에게 공정하고 합리적으로 CPU 자원을 할당하기 위해 운영체제는 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 기다리게 할지를 결.. 2024. 10. 17. 프로세스와 스레드 5 - 파이썬 코드로 스레드 확인 실습해보기 이번에도 역시 스레드 실습을 진행해 보겠다. 코드로 스레드 만들기 test.py 파일을 만들고 해당 문서에 코드를 작성해 본다. 실행하면 pid 값을 출력할 수 있다. 이제 스레드를 만들어서 이를 출력해 볼 것이다. 이제 스레드를 실행할 함수를 만들고, 함수 정보와 함께 출력해 준다. 그리고 스레드 번호를 id로 받아오고 프로세스 id 값도 찍어준다. foo의 PID 값이 my pid 값과 동일하다는 것을 알 수 있다. 스레드는 프로세스를 이루고 있는 자원을 공유하고 있고, PID 값도 공유하고 있는 실행 흐름의 단위이기 때문이다. 동일한 작업을 하는 여러 스레드 만들기이번에는 동일한 작업을 하는 스레드를 만들어보았다. 각각의 스레드에서 실행한 스레드 값을 같을까, 다를까? 같을 것.. 2024. 10. 17. 프로세스와 스레드 4 - 스레드 스레드라는 말을 프로그래밍에서 많이 들어본다. 드디어 스레드에 대해 공부해 본다. 스레드는 프로세스를 구성하는 실행의 흐름 단위이다. 이 말이 정확히 무엇을 의미하는지, 멀리스레드와 멀티 프로세스의 차이를 알아볼 것이다.여기서는 소프트웨어적인 스레드를 학습하게 된다. 개발자로서 일을 하게 된다면 반드시 스레드를 다루게 될 날이 올 것이다. 하지만 스레드와 관련한 내용은 프로그래밍 기본서만 가볍게 학습하면 놓치기 쉬운 부분이기도 하다. 이번 절을 통해 스레드와 멀티스레드란 무엇인지, 멀티스레드는 멀티프로세스와 어떤 차이가 있는지 학습해 보겠다. 프로세스와 스레드전통적인 관점에서 보면 하나의 프로세스는 한 번에 하나의 일만을 처리했다. 가령 웹 브라우저, 게임, 워드 프로세서 프로세스가 있을 때 이 모.. 2024. 10. 17. 프로세스와 스레드 3 - 파이썬 코드로 프로세스 확인 실습해보기 이번에는 파이썬 코드로 프로세스를 확인하는 실습을 진행해보려고 한다. 프로세스 만들기 test.py라는 파이썬 파일이 있고 다음과 같은 코드를 실행시킬 것이다. hello, os!라는 문자열을 출력하는 파일을 하나 작성했다. 이 코드를 실행시키면 이와 같은 문자열이 출력된다. os를 임포트하고, getpid()를 통해 현재 프로세스의 PID 값을 확인해볼 수 있다. PID 값이 출력되었다. PID 값은 운영체제가 그때그때 부여해주는 값이라 똑같은 코드를 쳐도 다를 수 있다. 이렇게 PID 값이 각기 달라지는 것을 확인했다. 프로세스가 끝나면 PID 값을 수거해간다. 동일한 작업을 실행하는 프로세스 만들기 이번에는 자식 프로세스를 생성해보려고 한다. 동시에 실행하는 프로세스를 fo.. 2024. 10. 17. 프로세스와 스레드 2 - 프로세스 상태와 계층 구조 이어서 프로세스 상태에 대한 학습을 시작해 본다. 오후에 충분히 쉬었으니 오늘 저녁부터 내일 새벽까지 열심히 달려볼 생각이다. 여기까지만 공부하고 저녁을 먹을 생각이다.프로세스들은 각자의 상태를 가지고 계층적인 구조를 이루고 있다. 프로세스 상태란 무엇인지, 프로세스 계층 구조란 무엇인지 알아보고 코드를 통해 확인해 볼 것이다. 프로세스는 모두 저마다의 상태가 있다. 운영체제는 이런 프로세스의 상태를 PCB에 기록하여 관리한다. 많은 운영체제는 이처럼 동시에 실행되는 수많은 프로세스를 계층적으로 관리한다. 이번 절에서는 프로세스들의 상태와 계층적 관리에 대해 자세히 알아보겠다. 프로세스 상태컴퓨터를 사용할 때 여러 프로세스들이 빠르게 번갈아 가면서 실행된다. 그 과정에서 하나의 프로세스는 여러 상.. 2024. 10. 17. 프로세스와 스레드 1 - 프로세스 개요 프로세스 관리는 운영체제의 핵심 서비스이다. 운영체제가 관리하는 프로세스가 무엇인지 알아보고 프로세스가 실행되는 과정들을 살펴보겠다. 지금까지는 단순히 '실행 중인 프로그램'이라고 표현했지만, 이 프로그램을 프로세스라고 한다. 프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리일 뿐이지만, 보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다. 이 과정을 '프로세스를 생성한다'라고 표현한다. 프로세스 직접 확인하기컴퓨터가 부팅되는 순간부터 수많은 프로세스들이 실행된다. 윈도우에서는 작업 관리자의 [프로세스] 탭에서 확인할 수 있고, 유닉스 운영체제에서는 ps 명령어로 확인할 수 있다. 실제로 컴퓨터를 켜고 확인해보면 자신이 실행한 프로.. 2024. 10. 17. 운영체제 시작하기 4 - 운영체제의 큰 그림 3 : 시스템 호출 실습해보기 시스템 호출에 대한 심화 학습을 진행해보려고 한다. 시스템 호출은 운영체제 서비스를 제공받기 위한 방법이므로 시스템 호출 종류만 잘 파악해도 해당 운영체제를 깊이 있게 이해할 수 있다. 이곳에서는 유닉스, 리눅스의 운영체제에서 사용하는 대표적인 시스템 호출의 종류에 대해 알아보겠다. 우선 시스템 호출을 정리한 테이블을 살펴보기로 하자.시스템 호출의 종류 https://minchul.net/self-learning-cs/system_calls/syscalls.html리눅스 시스템 호출 정리 이하 문서는 리눅스의 시스템 콜(x86)을 일부 정리한 문서입니다. 시스템 호출의 이름(Name)을 클릭하면 해당 시스템 호출에 대한 자세한 정보를 안내하는 공식 페이지로 minchul.net 이런 식으로 시스템.. 2024. 10. 17. 운영체제 시작하기 3 - 운영체제의 큰 그림 2 : 운영체제의 핵심 서비스 이이서 운영체제의 큰 그림에 대해서 학습해본다. 요즘 인간에 대한 회의와 염증을 느끼며 마음이 많이 무겁도 힘들다. 전에는 나의 마음을 솔직하게 표현하는 사람이었다. 하지만 개발 세계에 들어와 너무나도 사무적이고 무관심한 사람들로 가득한 사회를 만났다. 그럴 때마다 나를 잃지 않고 다시 일어났지만 요즘은 나도 그들처럼 무심하고 내 감정도 최대한 이야기하지 않기로 다짐해본다. 컴퓨터와 친숙한 사람들이라서 그런지 사고도 정말 컴퓨터적이고 자신에게 이익이 되지 않으면 결코 움직이지 않는다. 그들과의 세대 차이를 많이 느낀다. 이 세대 차이는 단순한 나이가 아닌 난 그들과 다른 세계에 살고 있고 절대로 가까워질 수 없는 벽 같은 것이다.난 가끔 이러한 세상이 무서워진다. 앞으로 10년 후에는 어떤 사고를 하는 .. 2024. 10. 17. 이전 1 2 다음