운영체제 11. Thread
쓰레드(Thread)가 무엇인가? fork()를 통해 프로세스를 만들면 text 영역을 제외한 모든 Context가 복제되어 따로따로 사용된다. 굳이 Data 영역이나 Open한 File 등이 복제될 필요가 없다면? 서로 다른 실행 흐름 끼리의 데이터 공유를 편하게 할 수 있을 것이다. 이것이 쓰레드의 개념이다. 쓰레드끼리는 text, data ...
쓰레드(Thread)가 무엇인가? fork()를 통해 프로세스를 만들면 text 영역을 제외한 모든 Context가 복제되어 따로따로 사용된다. 굳이 Data 영역이나 Open한 File 등이 복제될 필요가 없다면? 서로 다른 실행 흐름 끼리의 데이터 공유를 편하게 할 수 있을 것이다. 이것이 쓰레드의 개념이다. 쓰레드끼리는 text, data ...
프로세스는 무엇인가? 프로세스란 한마디로 실행 중인 프로그램이다. 프로그램은 저장장치에 들어있는 기계어 덩어리고, 프로세스는 메인 메모리 위에서 CPU에 의해 실행되고 있는 기계어 덩어리다. 여러개의 프로세스를 관리할 수 있는 시스템을 멀티 태스킹이 가능한 시스템이라 한다. 태스크란 프로세스와 같다. 적어도 운영체제에선 태스크와 프로세스를 구분하지 ...
부트스트래핑 (Bootstraping)이란 무엇인가? 우리가 흔히 부팅이라고 하는 용어가 부트스트래핑이 어원이다. 부트스트래핑의 어원은 부츠 뒤에 달린 고리를 뜻한다. 부츠를 신을 때 그 고리를 잡고 신으면 남의 도움 없이 스스로 부츠를 신을 수 있게 된다. 메인 메모리는 기본적으로 컴퓨터를 끄면 모든 정보가 휘발된다. 컴퓨터를 키면 메모리에 아무것...
캐시(Cache) 메모리란 무엇인가? CPU는 ALU와 레지스터를 가지고 있다. CPU가 연산을 하려면 메인 메모리의 값을 레지스터에 가져와야 한다. 만약 필요할 떄마다 일일히 메모리에 요청하면, ALU가 아무리 빨라봤자 CPU의 속도는 메인 메모리 속도에 의존한다. 이를 어떻게 해결하는가? 캐시(Cache) 메모리를 도입하여 해결한다. 한번 사용한...
불법 메모리 접근, 불법 I/O, 악의적 무한 루프를 어떻게 보호하는가? I/O의 권한을 프로세스에서 막 취득할 수 있으면 키보드 정보나 웹캠 등의 정보를 뽑아갈 수 있다. 메모리 주소도 함부로 접근할 수 있으면, 다른 프로세스에서 사용하는 메모리의 정보를 조작하여 치트 프로그램을 만들 수 있다. 혹은 고의적으로 무수히 많은 프로세스를 생성해서 무한 ...
Read 시스템 콜을 프로세스에서 호출하면 어떤일이 벌어지는가? read를 호출하면, libc.a 라이브러리의 read 함수가 호출된다. 이 read 함수는 read 시스템 콜을 호출하는 트랩 명령어가 기록되어 있다. CPU는 트랩 명령어를 만나면 인터럽트 처리 루틴을 호출한다. 이 루틴은 다음과 같다. CPU Context를 보존하고, 커널 모...
CPU는 어떻게 동작하는가? CPU는 그저 멍청하게 정해진 싸이클을 무한 반복하는 연산 장치이다. 어떤 과정을 반복하는가? Fetch, 가져오기 : 제어 장치(CU)가 PC 레지스터에 적힌 메모리 주소에서 실행할 명령어를 가져온다. 가져온 명령어는 명령어 레지스터(IR)에 저장한다. 이후 PC 값을 1 증가시킨다. Decode, 해독하기 : ...
시스템 콜이 무엇인가? 간단하게 말해 응용 프로그램이 커널을 사용하기 위한 인터페이스다. 왜 인터페이스로 만들어두었을까? 응용 프로그램이 함부로 사용하면 안되는 명령어들이 존재한다. 입출력, 메모리 접근, CPU 제어, 타이머 설정, 레지스터 접근 등이 그런 명령어에 해당한다. 이런 중요한 명령어를 특권 명령어라고 부른다. 특권 명령어를 응용 프로그...
시분할 시스템을 어떻게 구현해야 될까? 실제로 시스템을 구현할 때 해결해야 할 문제점들을 생각해보자. 누가 스케쥴링을 해주는가? 입출력 장치를 어떻게 관리하는가? 응용 프로그램은 다른 응용 프로그램의 메모리 영역을 침범해선 안된다. 어떻게 보호하는가? 메모리는 재부팅하면 휘발된다. 프로그램이 실행되려면 메모리에 올라가 있어야 한다. 프...
Q러닝이 무엇인가? Q러닝은 에이전트가 사전 지식 없이, 시행착오를 통해 환경과 상호작용하며 가장 큰 보상을 얻는 경로를 스스로 탐색하는 강화학습 알고리즘이다. 그게 어떻게 가능할까? Q러닝은 현재 상태를 알면 미래 상태를 알 수 있다는 마르코프 성질에 기반한다. 즉, 과거 상태를 고려하지 않고 현재 상태만을 고려한다. 그리고 현재 상태에서 어떤 ...