운영체제의 이해
- ROM
- 플래시 메모리(비휘발성)
펌웨어: 라면(코드) -> 플래시 메모리;
코드를 비휘발성 메모리 공간에 넣는다.
운영체제의 역할
운영체제가 있으면 동적으로 필요한 것들을 바꿔서 사용할 수 있다.
하드디스크
프로세스가 일을 할 때 필요한 정보를 적재시킬 수 있는 공간.
가상 메모리
발생배경: 프로세스중 사용되는 메모리는 거의 없다.
가상 메모리를 사용함으로써 필요한 부분만 프로세스에 올려서 사용이 가능하다.
ex) 저그와 테란의 대결 중에 프로토스의 메모리는 필요 없다.
-하드디스크에 있는 프로세스를 실제 메모리에 있는 것처럼 속이는 방법
등장배경
heap -> 성긴 주소 공간 -> Shared Library <- 성긴 주소 공간 <- stack
- 힙은 동적 메모리를 사용함에 따라 주소 공간 상에서 위쪽으로 확장
- 스택은 함수 호출을 거듭함에 따라 주소 공간 아래쪽으로 확장
- 성긴 주소 공간의 공백은 스택이나 힙 세그먼트가 확장될 때 사용되거나 프로그램 실행 중 동적으로 라이브러리를 링크할 필요가 있을 때 사용됨
- 가상메모리 공간은 한 프로세스가 다른 프로세스와 공유할 수 있는 영역을 만들어 줌
페이징
외부 단편화 : 프레임이 연결되어 있어야 확보된 공간을 사용 가능
내부 단편화 : 용량의 크기를 쪼개서 흩어진 메모리 공간을 사용 가능
-> 실행되지 않음(메모리공간이 연속되지 않으면 프로세스를 실행할 수 없다.)
MMU(메모리 관리장치) 재배치
- 프로세스가 연속된 위치에 있어야 함
- 페이징된 프로세스들이 연속되어 배치되지 않았을 때
- 메모리 관리장치를 통해 메모리가 연속되어 적재된것 처럼 속일 수 있음(레퍼런스 주소를 참조한다).
페이지 테이블 - 레퍼런스 주소를 재배치하여 모아둔 테이블
요구 페이징
(as 내부단편화) 프로세스들을 페이징 과정을 통해 균등학 ㅔ나눔.
- 필요한 페이지와 필요없는 페이지를 구분하고 필요한 페이지만 물리 메모리에 적재함.
- 메모리의 낭비를 막고 필요한 프로세스들만 메인 메모리에 적재하는 전략을 요구 페이징 전략이라고 함.
요구페이징은 프로세스의 이미지를 backing store(하드디스크의 특정 부분)에 저장
ex) 저그 vs 프로토스 게임중
backing store에는 저그,프로토스,테란도 저장되어 있음.
main memory에 올라가는 것은 필요하다고 요구된 저그와 프로토스 / 테란은 계속 적재되어있음.
요구되는 페이지만 물리메모리로 올림
메모리를 올렸다 내렸다 하는것은 꼭 효율적이지만은 않다.
유효비트 / 무효비트
어느 페이지가 디스크에만 있고 어느 페이지가 메모리에 올라와 있는지 구별이 가능해야 함
페이지 테이블에 valid 비트 필드 추가함
Valid비트 필드 =0 (물리메모리에 적재되어 있지 않음)
Valid비트 필드 =1 (물리메모리에 적재되어 있음)
Valid비트 필드를 확인하고 무효비트이면 backing store에서 물리메모리로 페이지를 가져온다.
ex) backing store에는 저그,프로토스,테란이 저장되어 있다.
페이지 테이블을 통해 같은 프로세스 공간에 연속되어 있는것처럼 속인다.
로지컬메모리(메모리를 적재해두는 공간)
-> 페이지 테이블
-> 피지컬 메모리(프로세스를 처리하기 위한 공간)
IO가 자주 일어나는것은 효율적이지 못하다.
최대한 IO가 자주일어나는 메모리들은 피지컬 메모리에 올려놓도록 한다.
- 교체 알고리즘 전략 : LRU 를 통해 IO가 자주일어나는것을 효율적으로 관리
페이지 부재처리
- 그림 추가하기
pure demand paging 과 prepaging
- 요구 페이징을 할 때 두 종류
pure demand paging은 처음부터 모든 페이지를 적재시키지 않고 CPU가 요구할 떄 vaild를 변경하여 페이지를 적재하는 방법
(속도는 느리지만 메모리 부담은 적음)
prepaging은 필요할 것 같은 페이지를 적재시키고 필요할 떄 다른 페이지를 적재시키는 방법
(속도는 빠를 수 있지만 메모리 부담이 생김)
쓰기 시 복사
x y a
x는 a를 읽을 수 있고 쓰기 권한도 가지고 있다.
y도 a를 읽기를 원하면 a에 접근할 수 있지만 읽기만 가능하며 x 또한 a에 대한 읽기 권한만 가지게 된다.
과거 : 자식 프로세스가 생성될 때 부모 프로세스의 페이지를 복사해주는 fork()를 실행하였다.
쓰기 시 복사방식은 자식 프로세스가 시작할 때 부모의 페이지를 당분간 함께 사용하도록 한다.
이때 함께 사용되는 페이지를 쓰기 시 복사 페이지 라고 한다.
둘 중 한 프로세스가 공유중인 페이지를 쓸 때 그 때 복사본이 만들어지는 것을 쓰기 시 복사라고 한다.
쓰기 시 복사를 하면 기존 페이지와 복사된 페이지가 두개가 존재하게 되어 내용이 수정되어도 상관없다.
'정리' 카테고리의 다른 글
[데이터베이스 기본]이너 조인(INNER JOIN) 아우터 조인(OUTER JOIN) (0) | 2020.03.06 |
---|---|
[JAVA] 객체 지향 프로그래밍에서 객체, 클래스, 인스턴스의 개념 (0) | 2020.03.05 |
데이터베이스 계층형쿼리(LEVEL) (0) | 2020.03.02 |
Flutter - Widget 위젯이란? (0) | 2020.03.01 |
롤업 (0) | 2020.02.27 |