스레드 프로세스는 두가지 특정 자원, 제어로 구분할 수 있는데 '제어'만 분리한 실행 단위를 '스레드'라고 한다. 프로세스 하나는 스레드 한 개 이상으로 나눌 수 있다. 스레드들은 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유한다. 스레드의 구조 스레드는 별도의 스택이 필요하고, 프로그램 카운터가 독립적이라서 같은 프로세스의 여러 스레드들이 동시에 코드의 동일한 부분이나 다른 부분을 실행할 수 있다. 스레드는 관련 자원과 함께 메모리를 공유할 수 있는데, 이 때문에 손상된 데이터나 스레드의 이상 동작을 고려해야한다. 응용 프로그램은 적어도 하나의 프로세스가 있고, 프로세스에는 스레드가 1개 이상 있다. 같은 프로세스의 스레드들은 동일한 주소 공간을 공유한다. (위 사진에서 스택을 ..
프로세스 일반적인 프로세스의 정의는 '실행중인 프로그램'이다. 프로그램이 실행중이라는 의미는 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태가 되었다는 것이다. 디스크 -> 메모리 (자신만의 메모리 영역(주소공간)이 있다는 의미) ▶ 프로그램이란 프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체다. 프로세스는 스택, 힙, 데이터, 코드 메모리 구조를 이루고, 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어있는 동적인 개체다. 프로세스 정의 정의 사용자 관점에서 프로세스 주소 공간을 가지고 실행하는 프로그램 시스템 관점에서 프로세스 실행중인 프로그램 프로세스는 프로그램 실행의 인스턴스도 된다. 예를들..
기준 동기/비동기 작업 완료를 누가 신경 쓰는가? 1) 동기 : '호출한 함수'가 스스로 신경쓴다. 2) 비동기 : '호출된 함수 (callback 함수)' 가 신경쓰고, '호출한 함수'는 신경쓰지 않는다. 블로킹/논블로킹 호출되는 함수가 바로 return 되는가? 호출한 함수가 제어권을 넘겨주는가? 1) 블로킹 : '호출된 함수'가 자신의 작업을 모두 마칠 때까지 '호출한 함수'에게 제어권을 넘겨주지 않고 대기한다. 2) 논블로킹 : '호출된 함수'에게 제어권이 넘어가지않고, '호출한 함수'가 제어권을 가지고 계속해서 다른 일을 한다. 위 내용은 동기/비동기, 블로킹/논블로킹을 요약한 내용이다. 계속해서 동기, 비동기, 블로킹, 논블로킹을 자세히 살펴보자. 동기/비동기, 블로킹/논블로킹의 판단 기준은 ..
Memory Model High Address 메모리 구조에서 높은 주소 영역으로, Heap, Stack 이 포함된다. Low Address 메모리 구조에서 낮은 주소 영역으로, Data 영역, Code 영역이 포함된다. BSS/GVAR Data 영역이 BSS와 GVAR(Data) 영역으로 나눠진다. BSS 영역에는 초기화되지 않은 데이터가 저장되고, GVAR 영역에는 초기화된 데이터가 저장된다. * 영역이 BSS로 분리되는 이유는? 초기화된 데이터는 초기화되지 않은 변수와 다르게, 해당 값을 프로그램에 저장하고 있어야 한다. BSS 영역은 초기화되지 않은 데이터가 저장되기 때문에, 프로그램이 실행될때 영역만 차지하고 그 값을 프로그램에 저장하고 있을 필요가 없다. BSS 영역 변수들이 많아져도 프로그램..