심화 07. exec() 시스템 호출을 사용하는 이유를 설명하시오
exec() 시스템이란? :
프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출
현재의 프로세스가 완전히 다른 프로세스로 전환된다.
•
코드 영역에 있는 기존의 내용을 지우고 새로운 코드로 바꾼다
•
데이터 영역이 새로운 변수로 채워진다
•
스택 영역이 리셋된다
exec() 시스템 호출을 왜 사용하는가?
프로세스의 구조체를 재활용하기 위해서 사용.
프로세스 생성 시 PCB 생성, 메모리에 자리 확보, 전역 변수 할당 등 여러 과정을 거친다
→ 위 과정을 exec() 시스템 호출을 통해서 생략할 수 있다.
부모 프로세스를 fork() 해서 코드, 데이터, 스택 영역을 복사한 뒤에 exec() 시스템 호출을 통해 프로그램을 덮어 씌워서 새로운 프로그램을 수행하게 된다.
심화 08. 프로세스 계층 구조의 장점을 설명하시오.
유닉스 프로세스 계층 구조
유닉스의 프로세스 계층 구조
init 프로세스를 전체 프로세스의 출발점으로 갖고, 나머지 프로세스들은 init 프로세스의 자식이 된다.
여러 작업의 동시 처리
1.
login 프로세스는 인증을 거쳐 컴퓨터에 접속하는 과정을 처리한다.
→ 여러 프로세스에서 login 프로세스를 fork() 호출하면 새로운 프로세스를 복사해, 동시에 여러개의 login 프로세스를 처리할 수 있다.
2.
login 프로세스 후 shell 프로세스가 필요하다.
shell 프로세스가 있어야 사용자가 운영제체에 명령을 내리고 결과를 받을 수 있다.
→ exec() 시스템 호출을 사용해 login 프로세스의 구조를 shell 프로세스로 활용할 수 있다.
→ 또한 기존의 부모-자식 관계도 유지할 수 있다.
용이한 자원 회수
프로세스 간의 책임 관계가 분명해져서 시스템을 관리하기가 수월하다.
→ 운영체제가 직접 자원을 회수하는 것이 아닌, 프로세스가 부모-자식 관계이므로 자식 프로세스가 작업을 마쳤을 때 사용하던 자원을 부모 프로세스가 회수하면 된다.
심화 09. 멀티스레드, 멀티태스킹, 멀티프로세싱, CPU 멀티스레드를 비교하여 설명하시오.
1. 멀티스레드
•
하나의 스레드를 여러개의 스레드로 분할하여 작업의 부담을 줄인다.
•
자원을 공유하고 자원의 생성과 관리의 중복성을 최소화 한다.
→ 정적인 영역을 같이 사용하고, 동적인 영역만 나누어 작업한다.
멀티스레드의 장점
자원의 중복사용을 피해서 낭비를 막는다.
→ 하나의 프로세스에서 여러 스레드를 사용하면 작업의 효율을 높일 수 있다.
•
응답성 향상
한 스레드가 입출력으로 작업이 진행되지 않더라도, 다른 스레드가 작업을 계속해 작업 요구에 빨리 응답 가능
•
자원 공유
한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유해서 원활한 작업 진행 가능
•
효율성 향상
불필요한 자원의 중복을 막아서 효율 향상
•
다중 CPU 지원
다중 CPU가 멀티 스레드를 동시에 처리해서 CPU 사용량 증가 및 프로세스 처리 시간 단축
멀티스레드의 단점
모든 스레드가 자원을 공유하기 때문에, 한 스레드에 문제가 생기면 전체 프로세스에 영향을 준다.
2. 멀티 태스킹
•
다수의 작업을 운영체제의 스케줄링에 의해 번갈아 가며 수행한다.
•
운영체제가 우리의 눈에는 동시에 수행되는 것 처럼 보이게 해준다
스케줄링 방식
•
멀티 프로그래밍 방식 : 입출력 작업의 종료를 대기할 동안 하나의 프로세서에서 다른 프로그램을 수행할 수 있도록 한다.
•
시분할 방식 : 응용 프로그램이 CPU를 점유하는 시간을 잘게 쪼개서 실행할 수 있게 한다.
•
실시간 시스템 방식 : 처리할 데이터의 입력과 동시에 실시간으로 처리해 즉시 응답한다.
3. 멀티 프로세싱
•
다수의 프로세서가 협력적으로 일을 처리한다. (1개의 컴퓨터에 2개 이상의 CPU)
•
네트워크로 연결된 여러 컴퓨터에 스레드를 나누어 협업하는 분산 시스템도 멀티 프로세싱이다.
•
멀티 태스킹은 단일 CPU에 의한 처리방식이고, 멀티 프로세싱은 다수의 CPU에 의한 처리 방식이다.
•
하나의 프로세서가 고장나도, 해당 프로세서가 진행중인 작업은 다른 프로세서에서 수행중이기 때문에 작업이 정지되지 않는다.
4. CPU 멀티스레드
•
한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법으로 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법
◦
멀티 스레드 : 운영체제가 소프트웨어적으로 스레드를 분할하여 운영
◦
CPU 멀티 스레드 : 하드웨어적인 방법으로 하나의 CPU에서 여러 스레드를 동시에 처리하는 병렬 처리 기법