본문 바로가기
프로그래밍/프로그래밍_공부

[면접 준비] OS

by Dean30 2021. 12. 19.
728x90

[면접 준비] OS

 

 

 

 

운영체제를 사용하는 목적?

1) 제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막음

2) 응용프로그램들이 단순하고 균일한 메커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작할 수 있도록 함

 

-> 두 가지 목표 달성을 위해 추상화를 이용

1) 파일 : 입출력장치의 추상화

2) 가상 메모리: 메인 메모리와 디스크, 입출력장치의 추상화

3) 프로세스: 프로세서, 메인 메모리, 입출력장치 모두의 추상화

 

 

 

 

 

프로세스란?

 

메모리에 올라가서 실행중인 프로그램이 프로세스

운영체제는 시스템에서 이 한 개의 프로그램만 실행되는 것 같은 착각에 빠지도록 해준다.

즉 프로그램이 프로세서, 메인 메모리, 입출력장치를 모두 독차지하고 있는 것처럼 보인다. 이 것은 프로세스라고 하는 개념에 의해 만들어진다.

 

프로세스란 프로그램에 대한 운영체제의 추상화 ! (머신의 추상화)

보조 기억장치(HDD, SSD)에 있는 명령어(코드)와 정적 데이터의 묶음인 프로그램이 메모리에 적재(할당)되면 프로세스가 된다.

다수의 프로세스들은 동일한 시스템에서 동시에 실행되고 있다는 환상을 주고, (CPU의 숫자보다 더 많은 프로세스 존재) 각 프로세스는 하드웨어를 배타적으로 사용하는 것처럼 느낀다. 이는 운영체제에 의한 문맥 전환(context switching)을 통해 교차실행된 결과이다.

 

프로세스 접근 가능 메모리 공간: Text(Instruction, 기계어), Data(초기화된 전역 변수, static), BSS(초기화x 전역 변수, static), Heap(malloc), Stack(지역 변수)

 

프로세스 관리: running, block, ready가 있음

 

 

 

 

쓰레드(Thread)란?

 

프로세스는 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다.(실제로 작업을 수행하는 주체)

해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이터를 공유하여 데이터 공유가 더 효율적이다.

 

 

텍스트 코드 힙 공유, 스택 각자 가짐

 

 

 

멀티 프로세스

  • CPU 여러개
  • 한 프로그램을 여러 프로세스가 진행
  • 하나 죽어도 됨

 

멀티 쓰레드

  • 가성비가 좋음. 자원을 많이 안 써서 + context
  • 하나 죽으면 다 죽음

 

 

가상메모리(Virtual Memory)란?

 

각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공하는 메인 메모리의 추상화 (가상 주소 공간)

이 기술이 성공할 수 있었던 주요 이유는 응용 프로그래머의 개입 없이 자동으로 동작할 수 있기 때문

 

프로세서(CPU)가 만들어내는 모든 주소를 하드웨어로 변역하는 작업이 필요

기본적으로 프로세스의 가상메모리의 내용을 디스크에 저장, 메인 메모리를 디스크의 캐시로 사용

 

주요 3가지 기능

1) 캐시 - 메인 메모리를 디스크에 저장된 주소공간에 대한 캐시로 취급하여 메인 메모리를 효율적으로 사용
2) 메모리 관리 단순화 - 각 프로세스에 통일된 주소공간을 제공
3) 보호 - 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호

 

요구 페이징(Demand paging) : 필요한 프로그램만 메모리에 적재하는 방법

 

1) 캐싱 도구로서의 VM (메인 메모리를 효율적으로 사용함)

 

- Page Table : 가상페이지가 DRAM과 Disk 어디에 저장되어 있는지에 대한 정보를 가진 자료구조(in 메인 메모리). 가상주소를 물리주소로 변환할 때마다 읽음.
- Page hit : DRAM에 캐싱되어 있는 워드를 읽을 때.

- Page fault : DRAM에 캐싱되어 있지 않음.

  • PT의 유효비트로부터 확인 후 Page fault exception 를 유발 -> Page fault exception handler가 희생 페이지를 알고리즘에 의해 정함 -> 이 페이지가 변경되었다면 디스크에 복사 -> PT에 swap out 반영 -> 디스크에서 메모리로 복사 -> PT에 swap in 반영 -> handler return -> mmu로 가상주소 재전송 -> page fault 없어짐
  • 요구 페이징 : 미스가 발생할 때, 하나의 페이지로 스와핑되어 들어오는 마지막 순간까지 기다리는 전략 (필요할 때 swap in)
  • (Page fault는 두 가지 경우 존재 :(1) DRAM에 cache miss 일때, (2) 권한이 없는 곳에 접근하려 할 때)

- Page allocation

 

 

2) 메모리 관리를 위한 도구로서의 VM

 

- 링킹의 단순화 : 분리된 가상주소공간은 각 프로세스들의 코드, 데이터, 힙, 스택이 물리 메모리 내 위치에 상관없이 동일한 기본 포맷을 사용하도록 하여 링커의 설계와 구현을 매우 단순화.

- 로딩(메모리 적재)의 단순화 : 메모리 매핑을 통해. 코드와 데이터 세그먼트를 위한 가상 페이지를 할당 후 PT 갱신(캐싱 x, demand paging)

- 공유의 단순화 : 서로 다른 프로세스에 들어 있는 가상페이지들을 동일한 물리페이지들로 매핑하여 프로세스들의 코드와 데이터를 공유하도록 한다. ex) printf 같은 표준 C 라이브러리

- 메모리 할당의 단순화 : 연속적인 가상메모리 페이지를 할당하고 임의의 물리페이지로 매핑함. 물리 메모리에서 k개의 연속적인 페이지를 찾을 필요가 없다.

 

  • 커널 가상메모리(Kernel VM): 응용프로그램 접근 금지, 커널 코드 내 정의된 함수 직접 호출 금지.
  • 스택(Stack): 함수 호출시 동적으로 스택이 커짐. 컴파일러가 함수 호출을 구현하기 위해 사용하는 user stack이 위치. 지역 변수
  • 힙(Heap): malloc, free에 의해 동적으로 메모리 할당, 반납
  • BSS: 초기화 x 전역 변수, static 변수
  • 데이터(Data): 초기화된(초기값 설정) 전역 변수, static 변수
    • static 변수는 데이터 영역에 할당되며 프로그샘 실행시 할당, 종료시 소멸된다.
  • 코드: 모든 프로세스들이 같은 고정 주소에서 시작

 

3) 메모리 보호를 위한 도구로서의 VM

 

- PTE에 허가 비트(residence bit)를 추가하여 제어 가능. 접근 허용되지 안은 곳 접근하면 segmentation fault !

 

 

주소의 번역

 

 

메모리 매핑

 

  • File backed page : DRAM 영역이 Disk의 일반 파일에 mapping(초기화). CPU 접근시 스왑(demand paging) 후 PT 갱신. DRAM의 이 영역이 파일 섹션보다 더 크다면 나머지 0으로 패딩
  • Anonymous page : DRAM 영역이 Disk의 anonymous file(이진수 0)로 mapping(초기화). CPU 접근시 희생자 페이지를 0으로 덮어쓰고 PT 갱신

공유 객체 vs 사적 COW(Copy On Write) 객체

 

 

https://dean30.tistory.com/39?category=967988

 

 

Fork 과정은?

새 프로세스의 가상메모리를 생성하기 위해 현재 프로세스의 주소공간 정보를 담은 자료구조(mm_struct, area struct, 페이지 테이블)를 복사하고 고유 PID 부여

이후 쓰기 작업 수행시 COW(Copy On Write) 메커니즘으로 physical memory에 새 페이지를  생성하고 사적 주소공간 개념은 유지

 

system call -> trap -> user에서 kernel 모드로 변경 -> fork 함수 실행 -> 새로운 프로세스 만들고 . code, data 같은 정적 데이터와 부모의 현재 PC, stack pointer, file table과 page table  같은 현재 부모 process context 를 복사한다.
+ COW(Copy on write) - 읽기 작업을 할때만 동일 물리 메모리 공유, 쓰기 작업 시작하면 COW로 새로운 메모리 할당

 

exception
  trap - 인위적 exception
  interrupt - 외부 IO 작업
  abort - 0으로 나누는거, 접근 불가능 한곳
  fault - 시정 되면 fuat 안되면 abort로 됨

 

 

10장 시스텝 입출력 단원

fork 과정

  1. 자식이 부모의 식별자 테이블 복사
  2. 부모와 자식은 동일한 오픈 파일 테이블을 공유
  3. 동일한 파일 위치를 공유

 

 

 

 

같은 파일

 

 

 

서로 다른 파일

 

 

 

파일(File)이란?

 

연속된 바이트

디스크, 키보드, 디스플레이, 네트워크까지 포함하는 모든 입출력장치는 파일로 모델링함

시스템에 들어있는 다양한 입출력장치들의 통일된 관점을 제공. 즉 응용프로그래머가 입출력장치들의 기술에 대해 몰라도 됨

 

 

 

 

가비지 컬렉션

동적 할당했던 메모리 영역 중 더 이상 필요하지 않는 힙 영역 블록을 자동으로 반환하는 동적 저장장치 할당기

장점

  • 유효하지 않은 포인터에 접근
  • 이중 해제(free)
  • 메모리 누수

단점

  • 어떤 메모리 해제해야 하는지 결정하는 데 비용이 듦
  • 가비지 컬렉션이 실행되는 타이밍을 알기 어려움

 

원리 - 가비지 컬렉터는 가비지 root 리스트를 가지고 있음. 가비지 root에서 참조여부 파악가능. 참조 안됐으면 제거.

순환 참조는 Mark&sweep으로 처리. 힙 내부 메모리 참조되고 있는거 마크 후 힙 외부에서 힙 메모리 참조하고 있는 것과 비교. 참조 안하고 있는게 순환 참조이므로 sweep 제거

어떻게 짤거냐 - ??

 

 

 

Cache란?

 

값을 복사해 놓는 임시 장소.

장점

  • 데이터 접근 시간이 줄어듦
  • 계산을 다시할 필요가 없음

 

Locality: 지역성

  • 시간적 지역성: 특정 데이터가 한번 접근되었을 때, 가까운 미래에 또 한번 접근할 가능성이 높은 것이 시간적 지역성이 높음
  • 공간적 지역성: 특정 데이터와 가까운 주소가 순서대로 접근되었을 경우 공간적 지역성이 높음. 메모리 주소에 접근할 때 해당 블록을 전부 캐시에 가져오게 됨

 

 

System call

시스템 운영 체제의 커널이 제공하는 서비스(함수들)에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

 

 

 

 

internet 프로토콜 사용

호스트와 라우터가 호환성 없는 LAN을 통해 데이터 전송하기 위해 사용하는 internet protocol

 

PH(packet Header) : Host B의 IP 주소를 담고 있음

FH1(Frame Header) : Router의 주소를 담고 있음

Rounter에는 라우팅 테이블이 있어 Host B로 가는 정보를 가지고 있음

 

 

728x90

댓글