일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CS
- 정보처리기사
- 뮤텍스
- 운영체제
- 컴퓨터과학
- 깃허브
- 스터디
- 자바
- IT
- Effective Java
- 신입
- java
- Public
- 우리카드
- 컴퓨터공학
- 알고리즘
- 신입사원
- 공채
- 이펙티브 자바
- 깃
- 프로그래밍
- spring
- OS
- 스프링
- package-private
- 디지털
- github
- 세마포어
- 개발
- 메모리
- Today
- Total
목록OS (4)
주니어 개발자 성장기
물리 메모리 할당 메모리는 일반적으로 두 영역으로 나뉘어 사용한다. 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..
세마포어의 문제점 코딩하기 힘들다. 정확성(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);..