728x90

컴퓨터는 필수장치인 CPU와 메모리, 주변장치인 입출력장치와 저장장치로 구성되며, 각 장치는 메인보드에 있는 버스로 연결된다.

다양한 주변장치는 데이터 전송 속도에 따라 저속 주변 장치와 고속 주변장치로 구분할 수 있따.

 

저속 주변장치: 메모리와 주변장치 사이에 오고 가는 데이터의 양이 적어 데이터 전송률이 낮은 장치를 말한다. 키보드의 경우 아무리 빨리 타이핑을 한다고 해도 1초에 1KB를 넘지 않으므로 저속 주변장치이다.

 

고속 주변장치: 메모리와 주변장치 사이에 대용량의 데이터가 오고 가므로 데이터 전송률이 높은 장치를 말한다. 출력장치인 그래픽카드의 경우 모니터에 초당 수십 장의 그래픽을 보여주어야 하기 때문에 고속 주변장치이다. 하드디스크도 대용량의 데이터를 메모리에 올리거나 메모리에서 하드디스크로 옮겨야 하기 떄문에 고속 주변장치이다.

 

데이터 용량이 적다면 저속, 많다면 고속이다.

 

여러 주변장치는 메인보드 내의 버스로 연결된다. 그런데 버스에는 많은 종류의 장치가 연결되기 때문에 버스를 1개만 사용하면

병목 현상이 발생한다. 따라서 여려 개의 버스를 묶어서 사용하는데,

이 때 데이터가 지나다니는 하나의 통로를 채널이라고 부른다.

 

입출력 제어기는 2개의 채널, 즉 메인버스와 입출력 버스로 나뉘며, 메인버스는 고속으로 작동하는 CPU와 메모리가 사용하고 입출력 버스는 주변장치가 사용한다. CPU에서 입출력 요청이 오면 입출력 제어기는 입출력장치로부터 데이터를 직접 송수신한다. 입출력 제어기를 사용하면 느린 입출력 장치로 인해 CPU와 메모리의 작업이 느려지는 것을 막을 수 있어 전체 작업 효율이 향산된다.

 

입출력 버스를 고속 입출력 버스와 저속 입출력 버스로 분리하여 운영한다. 고속 입출력 버스에는 고속 주변장치를 연결하고 저속 입출력 버스에는 저속 주변장치를 연결하여, 두 버스 사이의 데이터 전송은 channel selector(채널 선택기) 가 관리한다. 

 

인터럽트는 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 역할 하는 신호이다.

CPU가 요청한 작업을 완료했을 때, 키보드로 데이터를 입력받았을 때, 네트워크 카드에 새로운 데이터가 도착했을 때, 하드웨어에 이상이 발생했을 때 등 다양한 경우에 인터럽트가 발생한다.

 

외부 인터럽트: 입출력장치로부터 오는 인터럽트뿐 아니라 전원 이상이나 기계적인 오류 때문에 발생하는 인터럽트를 포함하므로 하드웨어 인터럽트라고도 부른다. IRQ라는 고유의 인터럽트를 부여하여 어떤 장치에서 인터럽트가 발생했는지 파악한다.

 

내부 인터럽트: 숫자를 0으로 나누거나 자신의 주소공간을 벗어나서 작업하는 것과 같이 프로세스의 오류와 관련된 인터럽트는 내부 인터럽트이다. 내부 인터럽트는 프로세스의 잘못이나 예상치 못한 문제에 때문에 발생하는 인터럽트 이므로 예외상황 인터럽트라고도 부른다.

 

반면, 사용자가 직접 발생 시키는 인터럽트도 있는데 ctrl + c 와 같은 경우이다. 사용자의 의지로 발생시키는 자발적 인터럽트를 시그널이라고 부른다.

종류 특징 비고
외부 인터럽트 입출력 및 하드웨어 관련 인터럽트 주변장치 변화, 하드웨어 이상
내부 인터럽트 프로세스의 오류로 발생하는 인터럽트 예외 상황 인터럽트
시그널 사용자의 요청으로 발생하는 인터럽트 자발적 인터럽트

인터럽트 벡터: 여러 인터럽트 중 어떤 인터럽트가 발생했는지 파악하지기 위해 사용하는 자료 구조. 벡터 값이 1이면 인터럽트 발생!

 

버퍼: 버퍼는 속도가 다른 두 장치의 속도 차이를 완화하는 역할을 한다. 느린 장치를 통해 들어오는 데이터를 버퍼에 모아 한꺼번에 이동하면 효율적이다. 하드디스크나 CD-ROM 등 대부분의 입출력장치는 버퍼를 사용하여 느린 속도를 보완한다. 커널이 입출력 장치로 보내야 할 데이터를 버퍼에 담아 놓으면 입출력 제어기가 커널 버퍼에서 입출력 장치로 데이터를 보낸다.

 

sector(섹터): 하드디스크의 물리적 개념으로 가장 작은 저장 단위이다.

 

track(트랙): 플레터에서 회전축을 중심으로 데이터가 기록되는 동심원, 즉 동일한 동심원상에 있는 섹터의 집합을 말한다.

 

seek time(탐색 시간): 하드디스크의 특징 섹터에 저장된 데이터를 읽거나 쓰려면 그 섹터가 있는 트랙까지 헤드가 이동해야 한다. 이처럼 헤드가 현재 위치에서 그 트랙까지 이동하는 데 걸리는 시간을 탐색시간이라고 한다.

 

rotational latency time(회전 지연 시간): 특정 트랙까지 이동한 헤드는 플래터가 회전하여 원하는 섹터를 만날 때까지 기다린다. 이처럼 원하는 섹터를 만날 때까지 회전하는 데 걸리는 시간을 표현한다.

 

transmisstion time(전송 시간): 헤드는 원하는 섹터에 있는 데이터를 읽어 전송하는데, 이때 걸리는 시간을 표현한다.

데이터 전송 시간 = 탐색시간 + 회전지연시간 + 전송시간

 

Disk scheduling (디스크 스케줄링): 트랙의 이동을 최소화하여 이 탐색 시간을 줄이는데 목적이 있다.

 

FCFS 디스크 스케줄링: 요청이 들어온 트랙 순서대로 서비스한다.

 

SSTF 디스크 스케줄링: 현재 헤드가 있는 위치에서 가장 가까운 트랙부터 서비스한다. 만약 다음에 서비스할 두 트랙의 거리가 같다면 먼저 요청 받은 트랙을 서비스 한다. 효율성이 좋지만, 아사현상이 발생 할 수 있다.

 

블록 SSTF 디스크 스케줄링: 현재 트랙에서 가장 먼 트랙을 블록의 끝으로 이동한다. 따라서 멀리 있는 트랙도 몇 번만 양보하면 서비스 받을 수 있다. 이는 SSTF 디스크 스케줄링에 에이징을 적용한 것이다.

 

SCAN 디스크 스케줄링: 공평성 위배 문제를 완화하기 위해 만들어진 기법, 헤드가 한 방향으로만 움직이면서 서비스한다. 헤드가 움직이기 시작하면 맨 마지막 트랙에 도착할 때까지 뒤돌아가지 않고 계속 한 방향으로 전진한다.

 

C-SCAN 디스크 스케줄링: SCAN도 공평성에 위배가 된다. 그래서 바깥쪽에 공평성을 위해 끝에 도달했을 경우 반대 방향으로 이동할 때 중간 작업 없이 반대 끝 방향으로 이동한다.

 

LOOK 디스크 스케줄링: 더 이상 서비스할 트랙이 없으면 헤드가 끝까지 가지 않고 중간에서 방향을 바꾼다.

 

C-LOOK 디스크 스케줄링: 중간에서 방향을 바꾸는 경우에 중간 작업 없이 끝 방향으로 이동한다.

 

RAID: 자동으로 백업을 하고 장애가 발생하면 이를 복구하는 시스템으로 '레이드'라고 부른다. 메모리가 아닌 값싼 디스크를 이용하기 때문에 이런 이름이 붙었다.

728x90

'운영체제_스터디' 카테고리의 다른 글

#DAY5 물리 메모리 관리  (0) 2021.11.26
#DAY4 교착상태  (0) 2021.11.16
# DAY3 프로세스 동기화  (0) 2021.11.12
728x90
블로그에 작성하면서 다시 복습하는 노트이다.
스터디 책은 '쉽게 배우는 운영체제-(한및아카데미)'를 사용했다.

MAR (메모리 주소 레지스터): CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 메모리 주소 레지스터를 사용한다.

 

메모리 관리의 이중성: 프로세스 입장에서 작업의 편리함과 관리자 입장에서 관리의 편리함이 충돌을 일으키는 것을 말한다.

 

계층적 메모리 구조: 메모리를 계층적 구조로 만들어 작업 속도를 올리고 가격을 낮추는 방법

 

컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행한다. C언어, 자바 등이 있다.

 

인터프린터: 소스코드를 한 행씩 번역하여 실행한다. 자바스크립트, 베이직 들이 이 방식으로 프로그램을 실행한다.

 

컴파일러 목적

  • 오류 발견: 소스코드에서 오류를 발견하여 실행 시 문제가 없도록 하는 것이다. 컴파일러는 오류를 찾기 위해 symbol table(심벌 테이블)을 사용한다. 심벌 테이블은 변수 선언부에 명시한 각 변수의 이름과 종류를 모아놓은 테이블로, 선언하지 않은 변수를 사용하지는 않았는지, 변수에 다른 종류의 데이터를 저장하지는 않았는지 알 수 있다.
  • 코드 최적화: 사용하지 않는 변수를 삭제하면 더욱 간결해서 실행 속도가 빨라진다. 컴파일러는 실행하기 전에 코드를 점검하여 오류를 수정하고 최적화함으로써 작은 빠른 실행 파일을 만든다.

컴파일러와 인터프린터 목적

  • 크고 복잡한 프로그램에는 컴파일러를 사용하고 간단한 프로그램에는 인터프린터를 사용한다.

컴파일 과정

  1. 소스코드 작성 및 컴파일: 프로그래머가 C 언어나 자바로 소스코드를 작성하여 컴파일하면 목적 코드가 만들어진다.
  2. 목적 코드와 라이브러리 연결: 목적 코드가 만들어지면 라이브러리에 있는 코드를 목적 코드에 삽입하여 최종 실행 파일을 만든다.

Memory Manage Unit(메모리 관리 유닛): 메모리 관리자

  • fetch(가져오기 작업): 프로세스와 데이터를 메모리로 가져오는 작업이다. 메모리 관리자는 사용자가 요청하면 프로세스와 데이터를 모두 메모리로 가져온다.
  • placement(배치 작업): 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업이다. 배치 작업 전에 메모리를 어떤 크기로 자를  것인지가 매우 중요하다.
  • replacement(재배치 작업): 새로운 프로세스를 가져와야 하는데 메모리가 꽉 찼다면 메모리에 있는 프로세스를 하드디스크로 옮겨놓아야 새로운 프로세스를 메모리에 가져올 수 있따.

paging: 메모리를 같은 크기로 자르는 것을 페이징이라고 한다.

 

segmentation: 프로세스의 크기에 맞게 자르는 것을 세그먼테이션이라고 한다.

728x90

'운영체제_스터디' 카테고리의 다른 글

# DAY8 입출력 시스템과 저장 장치  (0) 2021.12.07
#DAY4 교착상태  (0) 2021.11.16
# DAY3 프로세스 동기화  (0) 2021.11.12
728x90
이 글은 운영체제 스터디를 진행하면서 본인이 이해하기 위해 작성하는 글입니다.
참고 도서는 '쉽게 배우는 운영체제(한빛아카데미)'입니다.

dead lock (교착상태) : 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 교착 상태라고 한다.

교착 상태는 아사 현상과 비슷해 보이지만 차이점이 있다.
아사 현상은 운영체제가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연되는 문제이고,
교착 상태는 여러 프로세스가 작업을 진행하다 보니 자연젹으로 일어나는 문제이다.

 

resource allocation grap (자원 할당 그래프) : 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것이다. 자원 할당 그래프를 사용하면 어떤 프로세스에 자원이 할당되어 있는지 혹은 어떤 프로세스가 자원을 기다리고 있는지를 한눈에 파악할 수 있다.

 

자원이 2개 이상의 프로세스를 동시에 허용하는 경우가 있다. 여러 프로세스가 하나의 자원을 동시에 사용하면 이를 "multiple resource (다중 자원)" 이라고 부른다.

 

*(교착 상태 발생) 식사하는 철학자 문제

철학자 4명이 둥그런 식탁에 둘러앉아 식사를 하는데,
왼쪽에 있는 포크를 잡은 뒤 오른쪽에 있는 포크를 잡아야만 식사가 가능하다는 조건이 있다.
철학자들은 음식을 먹기 위해 왼쪽의 포크를 잡은 뒤 오른쪽 포크를 잡으려고 옆을 볼 것이다. 
그런데 옆에는 이미 왼손에 포크를 들고 있는 다른 철학자가 앉아 있다.
결과: 식사하는 철학자 문제의 결과는 오른쪽 포크를 잡지 못해 모두 굶어 죽는다는 것이다.
  1. 철학자들은 서로 포크를 공유할 수 없다. - 자원을 공유하지 못하면 교착 상태가 발생한다.
  2. 각 철학자는 다른 철학자의 포크를 빼앗을 수 없다. - 자원을 빼앗을 수 없다면, 놓을때 까지 기다려야 하므로 교착 상태 발생.
  3. 각 철학자는 왼쪽 포크를 잡은 채 오른쪽 포크를 기다린다. - 자원 하나를 잡은 상태에서 다른 자원을 기다리면 교착 상태가 발생.
  4. 자원 할당 그래프가 원형이다. - 자원을 요구하는 방향이 원을 이루면 양보를 하지 않기 때문에 교착 상태가 발생.

 

교착 상태 필요조건

  • 상호 배제: 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다.
  • 비선점: 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점자원이야 한다. 자원을 빼앗을 수 없으면 공유할 수도 없다.
  • 점유와 대기: 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다. 다른 프로세스가 필요로 하는 자원을 점유하고 있으면서 또 다른 자원을 기다리는 상태
  • 원형 대기: 점유와 대기를 하는 프로세스 간의 관계가 원을 이우어야 한다. 점유와 대기를 하는 프로세스들이 서로 방해하는 방향이 원을 이루면 프로세스들이 서로 양보하지 않기 때문에 교착 상태에 빠진다.

 

교착 상태 해결 방법

해결 방법 특징
교착 상태 예방 교착 상태를 유발하는 네 가지  조건을 무력화한다.
교착 상태 회피 교착 상태가 발생하지 않는 수준으로 자원을 할당한다.
교착 상태 검출 자원 할당 그래프를 사용하여 교착 상태를 발견한다.
교착 상태 회복 교착 상태를 검출한 후 해결한다.

 

교착 상태 예방. 4가지 방법

  • 상호 배제 예방: 독점적으로 사용할 수 있는 자원을 없애버리는 방법이다. 시스템 내외 모든 자원을 공유할 수 있다면 교착 상태가 발생하지 않는다. 
  • 비선점 예방: 모든 자원을 빼앗을 수 있도록 만드는 방법이다. 하지만 임계구역을 보호하기 위해 잠금을 사용하면 자원을 빼앗을 수 없을 뿐만 아니라 상호 배제도 보장할 수 없다.
  • 점유와 대기 예방: 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법이다. 다시 말해 '전부 할당하거나 아니면 아예 할당하지 않는' 방식을 저용하는 것이다.
  • 원형 대기 예방: 자원을 한 방향으로만 사용하도록 설정함으로써 원형 대기를 예방할 수 있다. 모든 자원에 숫자를 부여하고 숫자가 큰 방향으로만 자원을 할당하는 것이다.

교착 상태 회피

banker's alogorithm (은행원 알고리즘)

  • 각 프로세스의 기대 자원과 비교하여 가용 자원이 하나라도 크거나 같으면 자원을 할당한다. 가용 자원이 기대 자원보다 크다는 것은 그 자원을 사용하여 작업을 끝낼 수 있는 프로세스가 있다는 의미이므로 '안정 상태' 이다.
  • 가용 자원이 어떤 기대 자원보다 크지 않으면 할당하지 않는다. 가용 자원을 사용하여 작업을 마칠 수 있는 프로세스가 없다는 의미이므로 '불안정 상태' 이다.
728x90

'운영체제_스터디' 카테고리의 다른 글

# DAY8 입출력 시스템과 저장 장치  (0) 2021.12.07
#DAY5 물리 메모리 관리  (0) 2021.11.26
# DAY3 프로세스 동기화  (0) 2021.11.12
728x90
블로그에 작성하면서 다시 복습하는 노트이다.
스터디 책은 '쉽게 배우는 운영체제-(한및아카데미)'를 사용했다.

프로세스 간 통신의 종류

  • 프로세스 내부 데이터 통신 :  하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신이다. 프로세스 내부의 스레드는 전역 변수나 파일을 이용하여 데이터를 주고받는다.
  • 프로세스 간 데이터 통신 : 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용파일 또는 운영체제가 제공하는 파이프를 사용하여 통신한다.
  • 네트워크를 이용한 데이터 통신 : 여러 컴퓨터가 네트워크로 연결되어 있을 때도 통신이 가능한데, 이 경우 프로세스는 소켓을 이용하여 데이터를 주고받는다.

 

통신은 데이터가 전송되는 방향에 따라 나뉜다.

  • 양방향 통신 : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조로, 일반적인 통신은 모두 양방향 통신이다. 프로세스 간 통신에서는 소켓 통신이 양방향 통신에 해당한다.
  • 반양방향 통신 : 데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 구조이다. 반양방향 통신의 대표적인 예는 무전기이다.
  • 단방향 통신 : 모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조이다. 프로세스 간 통신에서는 전역 변수와 파이프가 단방향 통신에 해당한다.

 

busy waiting(바쁜 대기) : 전역변수를 사용하는 통신 방식의 가장 큰 문제점은 언제 데이터를 보낼지 데이터를 받는 쪽에서는 모른다. 그러므로 데이터를 받는 쪽에서는 반복적으로 전역 변수의 값을 점검하게되어 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것이다.

 

프로세스 간 통신은 동기화 기능에 따라 분류된다.

  • synchronous communication (동기화 통신) : 동기화를 지원하는 통신 방식이다. 데이터를 받는 쪽은 데이터가 도착할 때 까지 자동으로 대기 상태에 머물러 있다.
  • asynchronous communication (비동기화 통신) : 동기화를 지원하지 않는 통신 방식이다. 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터가 도착했는지 여부를 직접 확인한다.

shared resource (공유 자원) : 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나, 쓰느냐에 따라 결과가 달라진다.

  • 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 'race condition(경쟁 조건)'이 생겼다고 한다.

critical section (임계구역) : 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 임계구역이라고 한다.

  • 임계구역과 관련된 전통적인 문제점 "product-consumer problem (생산자-소비자 문제)"
728x90

'운영체제_스터디' 카테고리의 다른 글

# DAY8 입출력 시스템과 저장 장치  (0) 2021.12.07
#DAY5 물리 메모리 관리  (0) 2021.11.26
#DAY4 교착상태  (0) 2021.11.16

+ Recent posts