본문 바로가기

CS

(71)
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상태가 됨 - 입출..
11. 프로세스 개념 * 프로세스 vs 프로그램 - 프로세스는 실행중인 프로그램 - 프로세스는 job, task 와 다 같은 말로 사용될 예정 e.g. 프로그램 파워포인트를 더블클릭해서 실행시키면 프로세스가 됨 - 프로세스는 현재 수행 중이라서 주소공간이 필요함 - 더많은 정보를 필요로함 - 프로그램은 디스크에 저장된 프로그램 - stack : 프로세스 수행 시 필요한 로컬변수나 함수에 전달될 인자를 저장 - heap : malloc함수를 통해 동적할당된 메모리 저장, 동적할당될 때마다 사이즈 증가, 삭제 시 사이즈 감소 - PCB (프로세스 관리를 위한 블록) : 프로그램 카운터, 프로세스 레지스터 - 프로세스가 line by line으로 계속 수행되고, 현재 프로세스에 맞게 레지스터 값을 계속 변경 e.g. 다음에 수행할..
10. 시스템 부팅, 부트스트랩 로더 * system boot : 부팅될 때 일어나는 os가 하는 일 - system generation(SYSGEN) : 시스템이 어떻게 설정되는지 세팅되는 과정 시스템 오퍼레이터에게 물어보거나, probe, 주어진 파일을 읽어봄 - SYSGEN program : 어떤 하드웨어를 사용했는지 자동으로 아는 프로그램 - 부팅 : 컴퓨터를 시작하는 커널에 로드된 절차 - 부트스트랩 로더 : 하드웨어 초기화 -> 커널을 메모리로 로딩 -> 커널 메인함수에 제어권을 줌 일반적으로 시스템 부팅할 때 처음 확인하는 롬에 부트스트랩 로더를 저장해둠 - single step approach : 1) 부팅 2) 부트스트랩로더로 제어권이 넘어감 3) 하드웨어 초기화 4) os를 램으로 로드 5) 제어권을 os 제일 첫번째 라인..