TIL 230923

geon·2023년 9월 23일
0

스프링 DB 1편

트랜잭션

DB 세션

클라이언트가 데이터베이스 서버에 연결을 요청해서 커넥션을 맺으면 서버 내부에 세션이 생성되고, 커넥션을 통한 모든 요청은 세션을 통해서 실행됨

세션은 트랜잭션을 시작하고, SQL을 실행하고, 커밋 또는 롤백을 통해 트랜잭션을 종료함, 이후에 새로운 트랜잭션을 다시 시작할 수 있음

자동 커밋과 수동 커밋

자동 커밋 : 각각의 쿼리 실행 직후에 자동으로 커밋을 호출
수동 커밋 : 수동으로 커밋이나 롤백 호출

보통 자동 커밋 모드에서 수동 커밋 모드로 전환하는 것을 트랜잭션을 시작한다고 표현함
autocommit은 한 번 설정하면 해당 세션에서는 계속 유지됨, 중간에 변경하는 건 가능 (세션 변수)

CSAPP (p.632 ~ 640)

입출력 장치 연결

입출력 장치는 I/O 버스를 통해 CPU, 메인 메모리와 연결
I/O 버스는 기반 CPU에 독립적으로 설계되어 있음
I/O 버스에 연결되는 장치들에는 USB 컨트롤러, 그래픽 카드, 호스트 버스 어댑터가 있음
호스트 버스 어댑터호스트 버스 인터페이스에 의해 정의된 통신 프로토콜을 사용해서 I/O 버스와 하나 이상의 디스크를 연결함, 이때 호스트 버스 인터페이스의 예로 SCSI, SATA가 있음

I/O Bus Design

PCI(Peripheral Component Interconnect) 모델에서는 시스템 내 각 장치가 버스를 공유하고, 한 번에 하나의 장치만 버스에 접근 가능
현대의 시스템에서는 PCI 버스PCIe(PCI express) 버스로 교체됨
PCIe 버스이더넷 스위치와 비슷한 방식으로 더 빠른 속도의 점대점 연결이 가능하게 함

디스크 접근 과정

CPU는 메모리 맵 입출력을 사용해서 입출력 장치에 명령을 전달함
메모리 맵 입출력 시스템에서는 주소 공간 내 주소 블록이 입출력 장치와의 통신을 위해 예약되어 있음
이러한 주소 하나하나를 I/O 포트라고 부름
버스에 연결된 입출력 장치는 하나 이상의 I/O 포트와 연관됨

  1. CPU가 디스크에 있는 데이터를 읽고자 할 때 I/O 포트에 3개의 명령어를 저장함
    첫 번째 명령어는 읽기를 시작하라는 명령과 읽기가 끝났을 때 인터럽트 신호를 보내는지 여부에 관한 파라미터를 나타냄
    두 번째 명령어는 읽고자 하는 논리적 블록 번호를 나타냄
    세 번째 명령어는 디스크 섹터의 내용을 저장할 메인 메모리 주소를 나타냄
  2. 디스크 컨트롤러가 CPU로부터 읽기 명령을 수신해서 논리적 블록 번호를 섹터 주소로 변환하고, 섹터 내용을 읽고, 메인 메모리로 직접 전송함
    이때 CPU의 개입이 일어나지 않고, 장치가 read/write bus transaction을 스스로 수행하는데 이를 DMA(Direct Memory Access)라고 함
  3. DMA transfer가 끝나고, 메인 메모리에 섹터 내용이 저장되면, 디스크 컨트롤러는 CPU에 인터럽트 신호를 보내 입출력 작업이 끝났음을 알림 (CPU 칩의 외부 핀을 통해 신호를 보냄)
  4. CPU는 하던 일을 중단하고, OS 루틴으로 점프해서 입출력 작업이 끝났음을 기록함
  5. 루틴이 끝나면, 실행 중단 지점으로 다시 되돌아감

Solid State Disk

SSD플래시 메모리 기반 기술
디스크 컨트롤러와 같은 기능을 하는 hardware/firmware deviceflash translation layer를 가지고 있음
플래시 메모리는 일련의 블록으로 구성되고 블록은 다시 일련의 페이지로 구성됨
데이터 읽기/쓰기페이지 단위로 가능하지만 삭제블록 단위로만 가능
데이터를 지우면 다음 번 데이터를 지우기 전까지 각 페이지는 한 번만 쓰기 가능

profile
뭐라도 적기

0개의 댓글