일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- IT
- 뮤텍스
- 정보처리기사
- 이펙티브 자바
- 우리카드
- 운영체제
- 스터디
- 신입사원
- 디지털
- spring
- 깃허브
- 신입
- package-private
- 프로그래밍
- Public
- 세마포어
- 스프링
- 컴퓨터과학
- OS
- 알고리즘
- Effective Java
- 공채
- 메모리
- 컴퓨터공학
- java
- github
- 개발
- 깃
- CS
- 자바
- Today
- Total
목록운영체제 (7)
주니어 개발자 성장기
물리 메모리 할당 메모리는 일반적으로 두 영역으로 나뉘어 사용한다. OS 상주 영역 interrupt vector와 함께 낮은 주소 영역 사용 사용자 프로세스 영역 높은 주소 영역에 있다. 사용자 프로세스 영역의 할당 방법 Contiguous allocation(연속 할당) 각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 것 외부 조각(external fragmentation) / 외부 단편화 분할(partition)의 크기가 작아 프로그램에 할당되지 못해 낭비되는 메모리 공간 내부 조각(Internal fragmentation) / 내부 단편화 프로그램에 할당되었지만 사용되지 않는 메모리 공간 고정 분할 할당(Fixed partition allocation) 물리적 메모리를 몇 개의 영구적 ..
논리 주소(logical address) 프로세스마다 독립적으로 가지는 주소 공간 각 프로세스마다 0번지부터 시작한다. CPU가 보는 주소는 logical address이다. 물리 주소 메모리에 실제 올라가는 위치 주소 바인딩: 주소를 결정하는 것 Symbolic Address -> Logical Address -> Physical Address Logical Address에서 Physical Address으로의 변화 시점(next page)이 언제인가? Compile time binding 물리적 메모리 주소(physical address)가 컴파일 시 알려짐 시작 위치 변경시 재컴파일해야 한다. 컴파일러는 절대 코드(absolute code)생성 현재는 거의 사용되지 않음 Load time bindi..
교착상태(Deadlock) 일련의 프로세스들이 서로가 가진 자원(SW || HW)을 기다리며 block된 상태 자원이란? 하드웨어, 소프트웨어 등을 포함하는 개념 EX) I/O device, CPU cycle, memory space, semaphore 등 프로세스가 자원을 사용하는 절차 요청(Request), 획득(Allocate), 사용(Use), 반납(Release) 발생 조건 Mutual exclusion(상호 배제) 매 순간 하나의 프로세스만이 자원을 사용할 수 있음 No preemption(비선점) 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음 Hold and wait(점유 대기) 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있음 Circula..
세마포어의 문제점 코딩하기 힘들다. 정확성(correctness)의 입증이 어렵다. 자발적 협력(voluntary cooperation)이 필요하다. 한 번의 실수가 모든 시스템에 치명적인 영향을 줄 수 있다. 실수 예시 Mutual Exclusion이 깨짐 V(mutex); Critical Section P(mutex); Deadlock 발생 P(mutex); Critical Section P(mutex); Monitor 동시 수행중인 프로세스 사이에서 abstract data type의 안전한 공유를 보장하기 위한 high-level synchronization construct 이다. Monitor에서 자체적으로 프로세스의 접근을 관리하기 때문에 세마포어와 달리 개발자가 직접 Lock을 걸 필요가 ..
개요 '식사하는 철학자 문제'라고 하며 철학자는 1. 밥먹기 2. 생각하기 2가지 일을 할 수 있다. 반면 젓가락의 갯수(공유자원)는 제한되어 있다. 이 문제의 해결법을 코드로 살펴보자. Solution A Initialization /* 최초 값은 모두 1이다. */ semaphore chopstick[5]; 철학자는 5명으로 가정하고 젓가락은 5개가 있다고 가정하자. Philosopher i(i번째 철학자) do { //왼쪽, 오른쪽 젓가락을 잡는 연산 P(chopstick[i]); P(chopstick[(i + 1) % 5]); //식사 eat(); //왼쪽, 오른쪽 젓가락 놓는 연산 V(chopstick[i]); V(chopstick[(i + 1) % 5]); think(); } while(1);..
문제 상황 주로 데이터베이스에서 발생하는 문제이다. 한 프로세스가 DB에 Write 중일 때 다른 프로세스가 접근하면 안된다. Read는 동시에 여럿이 해도 된다. 해결법 Writer가 DB에 접근 허가를 아직 얻지 못한 상태에서는 모든 대기중인 Reader들을 다 DB에 접근하게 해준다. Writer는 대기 중인 Reader가 하나도 없을 때 DB 접근이 허용된다. 일단 Writer가 DB에 접근 중이라면 Reader들은 접근이 금지된다. Writer가 DB에서 빠져나가야만 Reader의 접근이 허용된다. 여기서 Shared Data는? DB 자체 readcount - 현재 DB에 접근 중인 Reader의 수 두 가지 동기화 변수(세마포어) Mutex 공유 변수 readcount를 접근하는 코드(cri..