[OS] User Thread vs Kernel Thread
·
Low Level/OS
User Thread 사용자 영역의 스레드로 개발자가 API를 사용하여 직접 관리할 수 있는 쓰레드다. 대표적인 예로는 다음과 같은 것들이 있다. Java의 Virtual Thread C의 Pthread Go의 goroutine Kernel Thread 운영체제에서 관리하는 쓰레드로 OS Thread 라고도 한다. Relatinship between User thread and Kernel Thread User thread - OS thread 는 Many-to-One, One-to-One, Many-to-Many 로 나뉜다. Many-to-One 장점 User thread 생성을 개발자가 원하는 만큼 값싼 비용으로 할 수 있다. User thread 간 Kernel 레벨의 Context Switchin..
Virtual Memory
·
Low Level/OS
Linux 기준 하나의 Process가 메모리에서 차지하는 공간이 4GB이다. 그럼 유저의 RAM 사양이 8GB면 프로세스 2개 로드된 상태에서 끗..? 말도 안되지 근데 어떻게 이런 일이 가능한 것일까? [가상메모리? 물리메모리?] 일단 프로그램을 실행하면, 프로세스 스케쥴러가 가상메모리안에 모든 스택영역을 예약한다. 하지만 물리메모리에는 그렇지 않다. 추가적인 물리메모리가 요구될 때에만 할당한다. 그렇다. 하나의 프로세스가 4GB 만큼 예약되었다고 해서 실제로 CPU가 반드시 4GB만큼 명령어를 읽어나갈 필요는 없다. 실제로 동작할 때 (이 부분은 약간 의문이 남는다) 물리 메모리에 추가 할당된다. [가상메모리 활용 방식] IDT(Interrupt Descriptor Table), System cal..
Interrupt 동작과정 (feat. System Call)
·
Low Level/OS
Unix 계열의 어셈블리어의 3줄의 코드로 표현되는 시스템 콜 함수 인터럽트 수행과정을 살펴보자. 우선 cpu Register의 'EAX' 'EBX'부터 가볍게 눈으로 보고 넘어가자 EAX (Extended Accumulator Register) : Arithmetic Logic Operation 수행, 함수의 반환값이 이 레지스터에 저장됨. EBX (Extended Base Register): 메모리 주소를 저장하기 위한 용도 (32 bit Linux OS 기준) 시스템콜 인터럽트의 수행 과정을 살펴보자 1. 시스템콜 어셈블리 코드 실행 (살펴보기!) [Assembly Code] mov eax, 1 mov ebx, 0 int 0x80 eax : systemcall number (주소)가 저장됨 ebx:..