본문 바로가기

CS/오퍼레이팅 시스템

(19)
19. 멀티스레딩 모델 - 커널 스레드 : 커널 내부적으로 생성, 삭제되는 스레드, 운영체제에 의해 관리됨 - 유저 스레드 : 유저스페이스 스레드 라이브러리에 의해 생성 유저스레드는 커널스레드에 매핑되어야 함 커널이 커널스레드를 스케줄링하고 유저스레드가 커널스레드에 매핑되어서 수행 커널은 유저스레드를 인식 못함 - 유저스레드는 반드시 커널스레드에 매핑 커널스레드가 block되면 거기에 매핑된 유저스레드 모두 block (= waiting) 멀티코어, 멀티프로세싱 환경에서 서로다른 스레드가 서로다른 프로세스에 랃아되어 수행 -> 각 커널 스레드가 서로다른 cpu를 할당받음 커널 스레드가 block되어 waiting 상태가 되면 그 커널스레드에 매핑된 유저스레드 모두 waiting state가 됨 한 스레드 ua 가 io 수행을 ..
18. 멀티코어 프로그래밍 Multi core : 코어가 여러개라는 것은 여러 스레드가 동시 수행 가능하다는 것이다 두가지 프로그래밍 방식이 있음 - Data parallelism 동일한 일을 수행하고 있지만 수행 대상 데이터가 다름 데이터를 여러 subset으로 나누고 각 코어에 다른 데이터 같은 일을 수행시킴 - Task parallelism 각 코어가 유니크한 연산을 수행. 데이터도 다를 수 있음 - concurrent : 동시성, 병행성 - parallelism : 병렬성 프로그래밍이 더 어려움 각 코어에 어떤 스레드를 할당할지, 코어간의 밸런스, 데이터를 효과적으로 분배, 특정 코어에서 산출한 데이터를 다른 코어에서 사용할 수도 있음, 테스트와 디버깅이 어려움, 소프트웨어 설계 측면에서 새로운 어프로치가 필요함
17. 스레드 * 스레드를 도입하게 된 이유 병렬적으로 수행되어야 할 프로세스가 많다 많은 프로그램들이 serialize 되지 않고 프로세스를 수행해야한다 - serialized : 스토리지 문맥에서 데이터구조나 객체 상태를 동일하거나 다른 환경에 저장하고 나중에 재구성할 수 있는 포멧으로 변환하는 것 웹 서버에서 잘 확인해볼 수 있음 웹 서버는 여러 요청을 받아서 병렬적으로 처리해야 한다. 클라이언트A가 요청을 보내면 서버는 fork함수로 그 요청을 처리할 프로세스를 생성해야하고 이 후에 클라이언트 B가 또 요청을 하면 그 요청을 처리하기 위한 또다른 프로세스를 생성해야한다. 지속적으로 프로세스를 생성해야하지만 fork 함수를 메모리를 많이 필요하며 computation양도 많다. 따라서 thread라는 오버헤드가 ..
16. IPC 프로세스간 커뮤니케이션 : message passing 하지만 각 프로세스마다 주소 공간이 있고 다른 프로세스의 공간을 볼 수 없어서 여러 프로세스간의 커뮤니케이션은 어려움 *IPC는 커널의 도움을 받아서 프로세스간 커뮤니케이션이 가능하다 1) message passing : 커널 내부에 메일 박스라는 데이터 스트럭처를 생성 2) shared memory : 특정 프로세스의 일부를 공유 영역으로 지정하고 그 영역을 통해서 커뮤니케이션 진행 https://snnchallenge.tistory.com/120 15. IPC 프로세스간 커뮤니케이션 : shared memory, producer-consumer문제 - independent : 다른 프로세스의 영향을 받지 않음 - cooperating : 여러 프로세스가 병렬적으로 수행되면서 한가지 일을 당성하고자함 ..
15. IPC 프로세스간 커뮤니케이션 : shared memory, producer-consumer문제 - independent : 다른 프로세스의 영향을 받지 않음 - cooperating : 여러 프로세스가 병렬적으로 수행되면서 한가지 일을 당성하고자함 * IPC의 장점 - information sharing : 파일 하나만 오픈하고 공유하면 리소스 사용을 줄일 수 있음 - computation speed up : 병렬적으로 수행하여 빨라짐 - modularity : 하나의 프로세스에 모든 기능을 넣으면 프로세스가 방대해져서 프로그램 모듈화가 어려움 - convenience : 여러가지 일을 한 번에 처리해서 편리하게 일 처리를 함 하지만 각 프로세스마다 주소 공간이 있고 다른 프로세스의 공간을 볼 수 없어서 여러 프로세스간의 커뮤니케이션은 어려움 *IPC는 커널의 도움을 받아서 프로세스간 커뮤니케이션..
14. 고아프로세스와 좀비프로세스 부모프로세스가 종료됐을 때 자식 프로세스는 부모 프로세스가 없어져서 고아프로세스가 됨 - 프로세스가 종료될 때, 커널은 이 프로세스가 누구의 부모 프로세스인지 확인 - 커널은 자식 프로세스의 부모 pid를 1로 바꿈 (init 프로세스가 부모라는 말) - init 프로세스 : 유닉스 계열 운영체제에서 부팅과정에서 최초로 생성되는 프로세스 시스템이 종료될 때까지 계속 살아있으며 pid는 일반적으로 1임 - 고아 프로세스가 작업을 종료하면 init 프로세스가 wait 함수를 호출한다 - init 프로세스가 고아 프로세스의 종료 상태를 회수하여 좀비프로세스가 되는 것을 막음 좀비 프로세스는 자식 프로세스가 종료됐지만 부모프로세스에 의해 거둬지지 않은 프로세스를 말함 즉 부모 프로세스가 wait함수를 호출해서 ..
13. 프로세스 시스템콜 부모 프로세스는 프로세스 트리형태를 만들면서 자식 프로세스를 만듦 아래 프로세스들의 부모가 프로세스가 되는 sched 프로세스는 pid가 0이 됨 * 프로세스 생성시 발생 이슈 - 부모프로세스와 자식프로세스는 리소스를 일부만 공유함 - 두 프로세스는 병렬적으로 수행되기도 하고 부모 프로세스가 wait 시스템콜로 자식 프로세스의 종료를 기다리기도 함 - 자식 프로세스는 부모프로세스와 별개의 프로세스이므로 주소 공간이 같으면 안됨 - 복제 후 overwrite * 유닉스 리눅스에서 fork system call - fork 함수는 프로세스를 생성하는 시스템콜임 - 리소스 공유 cpu 메모리 리소스는 별도의 프로세스에 별도로 할당되어야 함 부모 프로세스가 오픈한 파일은 자식프로세스와 공유됨 - 부모프로세스와 ..
12. 프로세스 스케줄링 - 프로세스는 active entity : 여러개의 프로세스가 번갈아 수행되기 때문에 스케줄링이 필요 * process scheduling queue - job queue : 시스템 내의 모든 프로세스의 집합 메인 메모리로 로드할 프로세스를 job큐에서 선택 - ready queue : 현재 state가 ready인 프로세스의 집합 프로세스가 waiting 상태면 절대 스케줄링을 하지 않음 cpu는 ready 큐에서 하나를 선택 = 프로세스 스케줄링 - device queue : 입출력 연산을 기다리는 프로세스들의 집합 => 프로세스들은 이 큐들을 옮겨다니면서 실행 됨 - ready큐에 있는 프로세스 하나를 선택해서 cpu에 dispatch됨 - cpu에서 실행이 끝나면 모두 ready상태가 됨 - 입출..