임베디드/운영체제(26)
-
프로세스 구조 deep dive
실제 C 프로그램이 프로세스로 실행될 때 동작을 알아보려고 한다 void insert(int data) { int tmp; tmp = data; } int main(int argc, char **argv) { insert(3); return 0; } 실제 메모리영역 stack에는 다음과 같이 쌓이면서 실행이 끝나거나 함수가 끝나면 순차적으로 pop 되면서 비워지게 된다
2019.10.15 -
동기와 비동기의 차이
- 서로 간 약간의 차이는 있지만, 동기는 blocking, 비동기는 non-blocking이라고 말할 수 있다. 동기는 메소드 실행과 동시에 결과값이 나오기를 기대하는 상태로, 결과값이 나올 때까지 blocking 되어있다. 반대로 비동기는 실행과 동시에 결과값이 나오기를 기대하지는 않는다. 따라서 이벤트 큐에 넣고 다른 task를 진행하게 된다 - 동기식은 프로그램 구조가 단순하다는 장점이 있지만 컴퓨터 자원을 비효율적으로 활용한다는 단점이 있다. 비동기식은 반대로 사용자가 결과값을 반환하는 시간을 정확히 알지 못한다는 점에서 프로그램 구조가 다소 복잡하다는 단점이 있지만 컴퓨터 자원을 효율적으로 활용한다는 장점이 있다
2019.10.14 -
기술면접용 세마포어
임계구역에 대한 접근을 막기 위해 Locking 메커니즘이 필요하다 1. Mutex - 임계구역에 하나의 스레드만 접근 가능 2. 세마포어 - 스레드 접근성을 높이고자 사용 - 임계구역에 여러 스레드가 접근 가능 - counter를 두어서 동시에 자원에 접근할 수 있도록 스레드 수를 제어 세마포어 연산 1. P - 임계영역에 접근하기 전 세마포어를 검사해서 1 이상이라면 세마포어 값 S를 1 차감시킨다 2. V - 임계영역을 끝내고 나올 때 세마포어 값 S를 1 증가시킨다 세마포어에서 중요한 이슈 - P 연산을 진행할 때 S값이 0이라면 대기를 하는데, 무작정 무한루프를 돌리는 것은 CPU를 심하게 차지한다 - 대기 큐를 만들어, 큐에 삽입한 후 sleep으로 block을 건다. V쪽에서 하나를 반환하면..
2019.10.14 -
스레드의 장단점
장점 1. CPU 활용도를 높여 성능 개선 2. 응답성 향상 3. 자원 공간 효율, IPC를 사용하지 않아도 된다 단점 1. 하나의 스레드가 문제가 생겨 종료되는 일이 생기면 프로세스 전체가 종료된다 2. 스레드를 많이 생성하면 context switching이 많이 생겨 성능 저하 발생
2019.10.13 -
멀티프로세싱과 스레드
멀티 프로세싱은 다수의 CPU가 하나의 JOB을 처리하는 것이다. 이 때 스레드 기술을 이용해, 스레드를 여러 개를 만들어 스레드 하나당 하나의 CPU가 처리한다면 병렬 실행으로 인해 실행 속도가 증가될 것이다. 최근 멀티 코어 추세로, 스레드 기술과 접목시켜 멀티 코어 활용도를 높일 수 있다
2019.10.13 -
프로세스와 스레드의 차이점
1. 프로세스는 자원을 할당받는 작업의 단위, 스레드는 자원을 이용하는 실행의 단위다. 즉 프로세스가 운영체제로부터 할당받은 자원을 내부 스레드가 공유하면서 사용하는 구조다 2. 스레드 통신은 프로세스 통신 IPC보다 시스템 콜과 통신 비용이 줄어든다는 장점이 있다(사용자 응답성 향상). 프로세스 통신에서는 context switching이 반복되는데 캐쉬 메모리 초기화 등 무거운 작업 등이 진행되고 이는 오버헤드(추가적으로 발생하는 시간) 발생을 유발한다 3. 같은 처리를 반복한다면 fork를 하기 보다는 스레드를 이용하는 것이 보다 효율적이다 4. 다만 전역변수를 스레드끼리는 공유할 때는 동기화 문제에 신경써야 한다 5. 스레드 생성시 힙, data, code 영역은 공유하지만 각 스레드만의 stac..
2019.10.13