2.4.6 스레드 스케쥴링 사용자 레벨 스레드 : 커널은 스레드의 존재를 인지 못하여 프로세스를 선택하고 할당시간만큼 프로세스에 cpu제어를 넘김. 커널 레벨 스레드 : 커널이 스레드를 선택하여 실행 차이점 : 성능(a>b) -> 스레드 문맥교환을 하려면 메모리 맵을 바꾸고 캐시를 무효화 하는 등의 동작 필요. But 커널 레벨 스레드에서는 한 스레드가 I/O에서 대기하는 경우 프로세스 전체를 중단시키지 않음. 2.5 전통적인 유닉스 스케쥴링은 그룹 개념이 없으며 1초에 한번씩 스케쥴링, 선점, 밴드(우선순위)로 나누어서 스케쥴링. 실제 계산할 땐 CPU시간을 반으로 줄이는 방법을 사용. 한 번 실행시키면 cpu시간을 증가시키니 우선순위를 낮춤. 반으로 줄이는건 우선순위를 높여주려고. 프로세스를 밴드 단..
2.3.7 모니터 : 고급 동기화 프리미티브 : 정확한 프로그램 작성을 도움(프로그래밍 언어 자체 지원 -> 세마포어의 위험성을 배제) 모니터의 속성 : 상호배제 성취 -> 단 하나의 프로세스만 한 순간에 모니터에서 활동 가능. But 프로세스가 진행할 수 없을 때 대기하는 방법도 필요. 버퍼가 가득 차면 생산자는 어떻게 블록되어야 하는가? -> 조건 변수와 wait, signal 연산을 통해 해결 두 프로세스가 동시에 모니터에서 활동하는 것을 피하기 위해, signal이후 어떻게 될 것인가에대한 규칙 필요 wait와 signal이 sleep와 wakeup과 유사하나, 자동적으로 상호배제가 이루어짐. 기찬아 이거 모르겠어 알려줘. 아이템 만들고 집어넣는다. 뺴고, 쓴다. 모니터를 선언하고, 컨디션은 꽉 ..
2.3.6 mutex 세마포어(단순버전) : 개수 세는 능력 필요 없을 때 empty : 데이터를 삽입하려면 빈 자원이 필요하므로 생산자가 사용가능한 자원의 수 확인 -> 0이면 대기 full : 데이터를 제거하려면 자원이 존재해야함 -> 0이라면 소비자는 대기 뮤텍스는 1, 엠프티는 N, full은 빈 슬롯의 개수. 뮤텍스는 언락과 락 둘 중 하나의 상태를 가짐. 0이면 언락, 다른 값이면 락. 우선순위 선점 스케쥴링에서 역전 현상 발생 : T3가 수행하고 있는데, t2시점에 락을 점유하게 됨. -> T1이 스케쥴링 -> T1실행하다가 락이 필요해짐 BUT T3가 이미 크리티컬 리전에 있기 때문에 상호 배제가 깨져서 T1은 어쩔 수 없이 잠듦. -> T2가 와서 T2가 수행, 이후 T3가 락을 푼 다음..
2.2.3 POSIX스레드 : 유닉스 표준, 여기서 정의한 스레드 패키지는 Pthreads라 불림. 2.2.4 Implementing Threads in User Space 과거 : 좌측처럼 유저레벨에서 thread만들어 쓰게끔 함. 커널엔 프로세스 테이블만 존재. 프로세스 별로 스케쥴링. 런타임 시스템 : 스레드 패키지에서 지원하는 라이브러리, 스레드 관리하는 프로시져들의 모음 : 안에 스레드 테이블을 갖고 있음. -> 프로세스가 커널에서 스케쥴링되어 실행되는 시점에 런타임시스템에서 스레드 3개중 하나를 골라 실행. : 스케쥴링 기능 O User level thread package : 프로세스 단위 CPU할당, 각 프로세스에서 스레드별로 나누어서 실행시켜주는 것 -> 비용 많이들고, 프로세스를 많이 ..
1.7 운영체제 구조 monolithic systems : 전 운영체제 이미지가 하나의 프로그램으로 커널 모드에서 실행. 메인 프로시져 : 서비스 함수들을 호출 서비스 프로시져 : 시스템 호출을 수행하는 서비스 함수들의 집합 유틸리티 프로시져 : 서비스 함수들을 돕는 유틸리티 함수들의 집합 유틸리티 프로시져 수정하려면 서비스와 메인 프로시져도 수정 필요 -> 코드가 방대해지고, 수정이 어려움 서비스 프로세스를 동작해야 하는데 재부팅 필요 -> 다운타임 발생 -> 경제적 손실 Layered system 운영체제를 계층별로 나누어 사용하자는 아이디어에서 출발, -> 실패 Micro kernels : MINIX 운영체제 그림. 커널의 핵심적인 기능만 아주 작게 담음. IPC : INter process com..
1.2 운영체제의 역사 1세대 : 진공관 2세대 : 트랜지스터 + batch 시스템 3세대 : IC 와 다중프로그래밍 - cpu는 연산이 빠르기 떄문에 입출력장치를 기다리게 된다 -> cpu는 놀게 되기 때문에 입출력장치가 job1 을 처리하는 동안 cpu는 job 2를 연산할 수 있고, 이 시점에 멀티 프로그래밍이 가능해졌다. - 이 때의 운영체제 중 MULTICS가 있는데, 보안코드가 많이 들어가 굉장히 느렸기에 상업적인 성공은 거두지 못함. 이후 UNIX로 발전 -pdf 11 / p12 4세대 : 개인용 컴퓨터. CP/M -> DOS -> MS-DOS -> GUI ... 1.3 하드웨어 복습 CPU는 메모리에서 명령(instruction)을 받아 실행하고, 결과를 다시 메모리로 반환. 모니터나 하드..