-
728x90
1. 스레드
프로세스가 생성되면 CPU 스케줄러는 프로세스가 해야할 일을 CPU에 전달한다. 이 때 전달하는 일 하나를
스레드라고 한다. 즉,CPU가 처리하는 작업의 단위이다. 운영체제가 처리하는 작업의 단위는 프로세스라고 볼 수 있다.작업의 크기
작업을 크기순으로 나열하면 처리(job) > 프로세스(task) > 스레드(operation) 이다. 여러 개의 스레드가 모여 프로세스가 되고, 여러 개의 프로세스가 모여 처리가 된다.
여러 프로세스를 한꺼번에 처리하는 방법을 일괄 작업(batch job) 이라고 한다.멀티태스크
프로세스는 서로 독립적으로 실행되다가 필요할 때 데이터를 주고받는다. A라는 프로세스가 비정상적으로 종료되어도 B라는 프로세스에 영향을 미치지 않는다. 프로세스 간 데이터를 주고받을 때는
프로세스 간 통신(IPC)을 이용한다.멀티스레드
프로세스 내 작업을 여러 개의 스레드로 분할해서 실행하는 기법이다. 스레드 간 변수나 파일 등을 공유하고 함수 호출 등의 방법으로
스레드 간 통신을 한다.멀티태스킹
운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법이다. 이렇게 여러 스레드에 시간을 잘게 나누어주는 시스템을
시분할 시스템(time-sharing system)이라고 한다. 이 시스템에서 운영체제는 CPU에 프로세스가 아닌 스레드를 전달한다.멀티프로세싱
여러 개의 CPU 혹은 여러 개의 코어를 통해 여러 개의 스레드를 동시에 처리하는 작업 환경을 말한다. 네트워크로 연결된 여러 컴퓨터에 스레드를 나누어 협업하는 분산 시스템도 멀티프로세싱이라고 한다.2. 멀티스레드
스레드는 왜 사용되는 것일까? 프로세스밖에 없는 환경을 가정해보자. 워드프로세서로 문서를 여러 개 편집하는 상황이라면
fork()시스템 호출로 프로세스를 여러 개 만들면 된다. 하지만 그렇게 되면 중복되는 영역이 여러 개 생기는 것이기 때문에 메모리가 낭비된다.스레드는 이러한 낭비를 줄이기 위해 사용된다. 프로세스 내의 코드, 데이터 영역을 공유하면서 여러 개의 일을 하나의 프로세스 내에서 하는 것이다.멀티스레드에서 스레드는 정적인 영역은 공유하고 동적인 영역은 독립적으로 생성한다. 동적인 영역에는
스택, 힙, 레지스터 값등이 있다.3. 멀티스레드의 장단점
장점
1. 응답성 향상
한 스레드가 입출력으로 인해 대기중이더라도 다른 스레드가 작업을 계속하여 작업 요구에 빨리 응답할 수 있음
2. 자원 공유
프로세스 내의 자원을 공유함으로써 원활하게 작업 진행 가능
3. 효율성 향상
자원을 공유하기 때문에 불필요한 자원의 중복을 막을 수 있음
4. 다중 CPU 지원
2개 이상의 CPU를 가진 컴퓨터에서 사용하면 CPU 사용량이 증가하고 프로세스의 처리 시간이 단축됨
단점
모든 스레드가 자원을 공유하기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다. 한 예로, 인터넷 익스플로러의 한 탭에서 오류가 나서 강제 종료하게 되면 그 탭만 종료되는 것이 아니라 인터넷 익스플로러 자체가 종료된다. 멀티 스레드 방식으로 작동하기 때문이다.
4. 멀티스레드 모델
프로세스처럼 스레드도
커널 스레드(kernel thread)와사용자 스레드(user thread)로 나뉜다.사용자 스레드
운영체제가 멀티스레드를 지원하지 않을 때 사용하는 방법이다. 멀티 스레드를 라이브러리를 통해 구현한 것이다. 하나의 커널 스레드에 여러 개의 스레드가 연결되기 때문에
1 to N모델이라고 부른다.이 모델은 라이브러리가 스케줄링을 전담하기 때문에 문맥 교환이 필요 없다.
하지만 커널 스레드가 입출력 대기 상태가 되면 연결된 모든 스레드도 대기 상태에 들어간다. 또한 여러 개의 스레드가 하나의 프로세스로 인식되기 때문에 여러 개의 CPU를 동시에 사용할 수 없다. 커널의 보호를 받지 못해 보안이 취약하다는 단점도 있다.
커널 스레드
커널이 멀티 스레드를 지원하는 방식이다. 사용자 스레드의 장단점을 반대로 생각하면 된다.
멀티레벨 스레드(하이브리드 스레드)
사용자 스레드와 커널 스레드를 혼합한 방식이다.
728x90'운영체제' 카테고리의 다른 글
10. 스케줄링의 개요 (0) 2021.09.20 09. 동적 할당 영역과 시스템 호출 (0) 2021.09.20 07. 프로세스의 연산 (0) 2021.09.20 06. 프로세스 제어 블록과 문맥 교환 (0) 2021.09.20 05. 프로세스의 개요 (0) 2021.09.20 댓글
