[TIL] 230213

LaStella·2023년 2월 13일
0

AOP, Spring 트랜잭션

AOP, Spring 트랜잭션

운영체제

하드웨어의 데이터는 CPU가 바로 읽지 못한다.
CPU의 1클럭 보다 메인 메모리가 가져오는 속도가 느리기 때문에 stall이 발생
CPU속도와 메인 메모리의 속도를 메꾸기 위해 캐시가 존재
시작 base registers, 크기 limit registers
CPU를 통해서 어떤어드레스에 접근할지 결정되면 base어드레스보다 큰지 확인, 다음으로 base+limit 보다 작은지 확인
메모리 주소를 결정하는 것을 바인딩이라고 한다.
컴파일 타임 바인딩 : 컴파일시 바인딩, 특수한 경우가 아닌이상 안씀, 여러 개의 코어라면 사용할 수 없다.
로드 타임 바인딩 : 시작위치가 있으면 거기서부터 몇번째 위치라는 상대적 위치를
실행 시간 바인딩 : 메모리에 접근할 때
프로그램이 실제로 도는 주소와 메모리 상에 도는 주소는 다를 수 가있다.
프로그램에서 사용하는 주소를 logical address
실제 메모리 주소 phsical address
MMU : logical 주소를 physical 주소와 매핑
Swapping : 시스템 내의 프로세스가 여러개 존재할 수 있다. 메모리는 한정되어있는데 프로세스는 한정된것보다 많이 있을수 있으며 활성화된 프로세스와 그렇지 않은 프로세스에 대한 메모리 이미지를 디스크에 그대로 가져다 놓는것
요즘은 메모리 사이즈가 크기때문에 스와핑의 필요가 적어짐
메모리에 프로세스를 어떻게 할당할것인가에 대한 문제
메모리는 두가지 파티션으로 나뉜다 하나는 OS 커널이 차지하며 나머지는 User프로세스가 할당된다.
first fit 비어있는 공간을 유지하고있을텐데 앞에서부터 하나씩 살피는 것, 할당할 프로세스보다 크거나 같은 공간을 찾으며 찾은 것들 중 첫번째를 사용
Best fit 가장 적합한 공간을 찾는다. 비어있는 공간이 최소가되도록, 이러면 남게되는 작은 공간은 영영 사용하지 않을 수 있는 문제가 발생(익스터널 프레그멘테이션이 발생)
worst fit 남아있는 공간 중 제일 큰 공간을 사용, 남은 공간도 충분히 크기때문에 다른 프로세스가 올라올 수 있다.
프로세스와 프로세스 사이에 남은 공간을 익스터널 프레그멘테이션
프로세스 내부에서 남은 공간을 인터널 프레그멘테이션
세그먼트 테이블 작성장점
어떤 라이브러리 모듈을 두 프로세스가 공유할 경우 라이브 모듈에 대한 두개의 세그먼트가 같이쓸수있다.
페이징

Virtual Memory

현재실행되고있는 부분만 메모리에 있으면 실행이 가능하므로 전부 메모리에올려놓을 필요가없다.
프로그램 시작을 빠르게할 수 있다.
하나의 프로세스가 차지하는 메모리 영역이 작게 유지, 동시에 여러개의 프로세스를 실행할 수 있다
VItual Adress space 프로그래이 생각하는 공간 logical memory와 유사
가상메모리는 디멘드 페이징과 디멘드 세그멘테이션으로 나뉜다.
디멘드 페이징 : 필요할때마다 페이지를 디스크에서 메모리로 올린다.
특정페이지를 접근했을때 디스크에서 올라와있지 않다면 트랩(익셉션)을 발생시키고 디스크에서 페지이를 올리고 다시 인스트럭션을 수행

Copy on Write

프레임 단위로 데이터를 올려놓는데 하나의 프레임을 여러 프로세스가 공유할 수 있다. (ex. 같은 프로그램을 여러번 실행시키는 경우, 서로다른 프로세스지만 같은 코드이므로)

읽기에는 문제가 없으나 접근한 페이지에 새로 쓴 데이터가 업데이트 된다면 다른 프로세스에서 접근하게되면 문제가 발생하므로 페이지의 복사를 하여 쓰기를 수행한다. 이것이 CopyOnWrite

메모리가 꽉찬 상태에서 메모리 Fault가 발생하여 새로 디스크에서 메모리로 페이지를 올려야된다면 메모지에서 안쓰이는 페이지를 디스크로 옮긴다.

어떤 페이지를 디스크로 옮길지 전략이 필요
페이지 할당 알고리즘은 2가지를 결정해야한다.

  1. 각 프로세스가 한번에 몇개의 페이지를 갖고 있게 할것인가
  2. 어떻게 페이지를 교체할건지

페이지 교체의 핵심은 어떤 페이지를 교체할것인가
최적 알고리즘
어떤 순서로 접근할지 알고있다면 가장 나중에 접근하는 것부터 교체한다.
→ 하지만 뒤에 어떤 순서로 접근할지 모르는게 현실

LRU 알고리즘 (Least Recently used)
최근에 가장 적게 사용한 페이지 부터 교체
LFU(leat frequency used)
접근한 빈도수를 가지고 교체, 사용하지않음
LRUK 알고리즘
1분전에 접근한 페이지가 그 이전에는 1시간전에 접근한 경우와
10분전에 접근한 페이지가 그 이전에는 11분전에 접근한 경우를 비교한다면
1시간동안 2번 접근한 페이지와 11분동안 2번 접근한 페이지 중 1시간 동안 2번 접근한 페이지를 교체

Thrashing

컴퓨터는 CPU를 최대로 사용하도록 설계, 따라서 IO를 수행하는 동안 CPU가 놀지 않도록 다른 프로세스를 실행하게한다. 문제는 메모리가 작아서 다른 프로세스를 접근했을때 페이지 폴트가 발생하고, 이때문에 IO가 수행되고 CPU는 다시 또다른 프로세스를 실행한다. IO만 수행하다보니 CPU가 놀고 있다고 판단되어 멀티프로세스의 한계를 더 늘리게되고, CPU는 더많은 프로세스를 실행시키며 더 많은 메모리 폴트를 발생시키게되고 결국 멈추게된다.

프리페이징

한페이지 올릴게 아니라 처음에 몇페이지를 한꺼번에 올려서 쓰레싱을 방지

객체지향 프로그래밍

https://www.notion.so/2-13-d83d82251c38421a9715d504215510b4

profile
개발자가 되어가는 중...

0개의 댓글