분류 전체보기 67

OS - 0523: Segmentation

#Segmentatoin - 기본 아이디어: 프로그래머의 프로그램 관점을 사용하여 프로세스를 메모리에서 별도의 세그먼트로 분할 > 각 세그먼트는 각각 구분된 목적을 가짐: ex) 코드, 정적 데이터, 힙, 스택 > 각 함수마다 별도의 코드와 stack segment 가질 수도 있음 > 세그먼트는 서로 다른 크기일수도 > 스택과 힙은 충돌하지 않음 > 전체 프로세스는 메모리에 로드되지만, 프로세스를 구성하는 세그먼트는 연속적으로 메모리에 로드될 필요가 없음 > 세그먼트 내부의 공간은 연속적임 > 각 세그먼트에는 보호 비트가 있음 > Read-Only 세그먼트(코드) > Read-Write 세그먼트(데이터, 힙, 스택) > 프로세스가 코드와 데이터를 공유하도록 허용 #Segment Addresses - 가상..

OS 0523 - Dynamic Relocation

★사전 지식★ - 로더 메인메모리 빈자리를 찾아서 로딩(3000~ 라고 가정) 3000을 mmu에 적어두고 mmu 테이블을 로더가 채움 프로세스가 로딩되면 -> 처음 시작주소는 0번지 -> MMU를통해 0번지가 3000번지가 됨 4개 세그먼트를 physical 메모리에 연속적으로 깔면 mmu에도 연속적(contiguous) 따로 로딩한다면 mmu에도 따로 -> 둘다 문제없이 찾을 수 있음 - MMU(Memory Management Unit) most significant bit(MSB) -> 10비트 주소체계라면 앞 2비트는 세그먼트를 지정하는데 사용 -> 나머지 8비트 오프셋으로 피지컬 주소(256바이트 중 어느 바이트를 지정할 것인지) = 피지컬 주소를 버추얼 주소로 변환하는 과정 - 프로세스가 여러..

OS(0516) - Memory Management

* a.c와 b.c를 컴파일하면 -> a.o, b.o가 생성됨 -> linker가 이들을 묶어 hello.exe 로 만들어줌 > linker는 각각의 external 변수가 잘 선언되어 있는지 확인 > 각 파일에 있는 symbol table을 linker가 합쳐줌 #Classifying Information Stored in Memory - 프로그램 내 역할에 따른 분류: 1. 프로그램 명령어(변경 불가) - text area, 공유됨 2. 상수: pi, maxnum, printf/scanf에서 사용되는 문자열 등(변경 불가) 3. 변수: 로컬 변수(stack), 전역 변수, 함수 매개변수(stack), 동적 할당된 저장소(malloc or new)(heap) -> 변경 가능, 초기화 돼있을수도 아닐수도..

OS(0516) - Deadlock 처리 방법

#Deadlock Avoidance - Motivation - Example to motivate a D.A. algorithm 1. state p - 아무 프로세스도 돌지 않음 2. state q - 스케줄러가 A를 실행 3. state r - 스케줄러가 B를 실행 4. state s - 스케줄러가 A를 실행하고, A가 프린터를 요청, 받음 5. state t - 스케줄러가 B를 실행하고, B가 plotter를 요청, 받음 - 음영처리된 영역을 보면 > \\\는 양쪽 프로세스가 프린터를 동시에 사용 -> 그러나 mutual exclusion에 의해 허용되지 않음 > ///는 비슷하지만, 플로터 - "unsafe" > OS가 이 박스에 들어가면, 데드락 걸림 -> 음영 영역(illegal mutual e..

OS-Deadlock0509

*복습 - 스케줄러 중 가장 부작용이 적은 것은 FIFO(퍼포먼스 무시, 적은 부작용만 고려) - CPU 자체가 리소스가 아닌 time quantum이 리소스 #Deadlock - 데드락은 두 개 이상의 프로세스가 각각 다른 프로세스 세트 내에서만 생성될 수 있는 이벤트를 기다리는 상황에서 발생하는 현상. 그러나 해당 이벤트는 결코 발생하지 않을 것이기 때문에 발생한 상태를 말함 - 데드락은 운영체제 설계자들이 직면하는 어려운 문제 중 하나 > 데드락을 해결하기 위한 다양한 접근 방법을 살펴보면, 해당 접근 방법이 문제를 얼마나 잘 해결하는지와 성능 또는 운영 체제 부담 사이에 트레이드 오프가 있음 - 운영체제는 경쟁하는 프로세스들 사이에서 시스템 자원 분배해야 함 > CPU cycle - preempt..

OS - Scheduling

#CPU scheduling - 레디 큐에서 돌아갈 프로세스를 고름 - 모든 프로세스가 메모리에 있다고 가정 - 멀티프로그래밍 환경에서 필수정 - CPU utilization을 최대화 하는것이 목표 - Non-preemptive scheduling - 다음 상황에서만 작동 1. 프로세스가 종료 2. 러닝에서 블락으로 프로세스 상태 전이 #Process Execution Behavior - 가정: 1. 1 유저당 1 프로세스 2. 1 프로세스당 1 스레드 3. 프로세스들은 독립적, 자원 확보 경쟁(CPU 포함) - 프로세스는 CPU에서 런 - I/O burst cycle: 1. 잠시 계산(CPU에서) 2. I/O 진행 3. 1, 2번 반복 - ★입출력을 해야 컴퓨팅이 가능하기 때문임★ ㅁ- Two type..

OS - Semaphore

#Semaphore -> Semaphore는 어따쓰나? 공유 자원을 여러 프로세스가 접근할수 있게 하며 상호 배제를 보장 -> 순번대로 처리(공유자원이 개별자원화) -> 프로세스간 공유변수 이용 시 충돌 방지 - semaphore는 1965년 다익스트라가 발명 -> 일반화된 잠금 메커니즘(주머니 속의 돌), 일종의 카운터 - 세마포어는 두 개의 atomic 연산, P/wait and V/siginal 지원 - 세마포어는 1로 초기화(Binary) or Counting semaphore의 경우 초기값이 1보다 큼 - 임계 영역에 들어가기 전에 스레드는 “P semaphore” 또는 “wait semaphore”를 호출 - 임계 영역을 떠난 후에는 스레드가 V semaphore 또는 signal semaph..