오늘 한일
1. 고급 웹 프로그래밍 과제 제출
2. 데이터 통신 공부 및 요약. 체크한 부분 추가적으로 내일 조사 예정
3. 운영체제 공부 및 요약 12장 진행중.
[9. 네트워크 계층3]_IPv4와 IPv6 내부 구조 및 프로토콜. 서브네팅 슈퍼네팅 가변길이서브네팅.
- 인터넷은 미국방성DARPA에서 만든 프로토콜이다. IPv4와 IPv6로 연결없이 데이터그램 방식으로 패킷을 서비스한다.
- IP계층의 프로토콜로 거리벡터알고리즘인 RIP, IGRP와 링크상태알고리즘인 OSPF같은 라우팅 프로토콜외에 주소변환, 네트워크 관리, 멀티캐스트 그룹관리 프로토콜이 존재한다.
- IP 5개의 클래스를 앞에 0, 10, 110등으로 표현해준다. 즉, 실제 네트워크 비트는 8비트 단위가 아니다.
- IPv4 Packet format에서 TCP헤더까지 IP단에서 데이터로 봄. SO는 13비트기에 8바이트 단위 값을 넣음
- 혼잡제어는 2bit ECN으로 제어한다. 00사용x, 01이나 10사용, 11혼잡. 헤더부분만 확인하기에 신뢰할 수 없다.
header 부분의 checksum만 라우터거칠 때 마다 확인하고 재계산하여 생성한다. ICMP등장- TTL 0이되면 ICMP TTL Exceeded packet을 생성하여 source에게 알린다.
- 서브네트워킹 시 서브넷 마스킹 값이 같으면 같은 네트워크에 있는 것.
- VLSM은 가변길이 서브넷마스크. 각각의 네트워크 별 호스트 개수를 담을 수 있는 만큼의 호스트 비트를 사용하게 서브넷 마스크를 다르게 함.
- CIDR은 슈퍼네팅으로 연속된 C클래스 주소를 결합해 B클래스 처럼 사용하는 기술이다. 각 네트워크마다 라우팅 정보를 테이블에 등록하던 기존에서 1개만 등록하여 해결.
- IPv4는 네트워크&호스트의 2-level 구조적 한계로 주소공간이 남비되었는데, IOT같은 많은 주소수요를 감당할 수 없다.
32비트 주소에서 128비트 주소로 확장시켜 IPv6등장. 표현을 102::1234:fa5b로 할 수도 있음.
Optional Header를 확장해 다양한 옵션 기능을 제공한다. 주소의 자동설정기능을 통해 IPv6 주소의 동적할당을 실형시켰다. Ipv6의 헤더는 40octets고정이어 고속처리가 가능하고, Extension header 사용이 가능하다. 오류제어기능(checksum)삭제! 실시간 고속전송처리 요청 시 Flow label을 사용함. Hop limit은 TTL- IPv6헤더 40octets에 next header포인터로 Hop-by-hop options header(라우터에게 알릴 사항), routing header(소스 라우팅일 때 사용. 경유할 라우터를 세팅), fragment header, destination options header(목적지노드에서 사용할 옵션정보), tcp header를 가리키는 포인터로 구성된다. HRFD
[10. 네트워크 계층4]_ARP와 캐시업데이트, ICMP, IGMP, ICMP와 IGMP의 데이터 전송경로 차이
- 부팅 시 기본 게이트웨이 라우터의 MAC주소, 전송 시 상대방의 MAC주소, 라우터가 관리하는 모든 컴퓨터의 MAC주소 등 전반적으로 MAC주소를 파악하기 위해 사용되는 ARPv4. (MAC프레임의 Destination Address에 들어갈 주소)
- ARP패킷 구조에 하드웨어와 프로토콜 타입 정보, Opcode(1~9_request&reply) 송신자 MAC&IP주소, 수신자 MAC&IP주소 정보가 들어간다. L2타입 Ethernet은 1, L3타입 IPv4는 0x0800이다.
- ARP request를 broadcast하고 ARP reply를 Unicast해서 받으면 라우터의 ARP cache에 등록한다. ARP는 서브넷에서만 사용하지 라우터를 넘어가지 않는다.
- Windows의 ARP 캐시 업데이트(연결가능) 시간= 기본연결시간x랜덤값(MIN<=랜덤값<=MAX)
- Linux의 ARP 캐시 업데이트(연결가능) 시간= 기본연결시간x랜덤값(0.5x기본연결시간<=랜덤값<=1.5x기본연결시간)
- LAN카드 변경 시 ARP캐시의 갱신 전까지는 네트워크가 불통이 되기에, 갱신이 필요하다.
- IP프로토콜은 Datagram방식으로 전송하기에 신뢰성이 없어 ICMP Echo Request&Reply를 사용하여 보완한다.
- ICMPv4패킷 구조: Type(0reply, 3목적지미달, 4발신제한, 5라우터갱신, 8_req, 11_ttlout)_1byte, code_2byte, checksum, data(의미없는 문자열)
- ICMP type3는 목적지 라우터에서 생성되며 전송못한 이유가 포함된다(ex code0이면 네트워크, 1이면 호스트 미도달)
- ICMP type5는 재지정 대상을 code를 통해 알림. (0이면 네트워크, 1이면 호스트, 2면 서비스와 네트워크 등)
- ICMP type11에서 일부가 안와서 조립이 안되면 code1로 설정한다.
- ICMP type4는 라우터 버퍼 용량이 꽉 차거나, 호스트 수신 버퍼 용량이 꽉 차면 송신 호스트에게 전송.
- IGMPv4는 멀티캐스트를 위한 것으로 Source Filtering은 불필요한 멀티캐스트 패킷 흐름을 제어하기 위한 것으로, 특정 소스 주소의 패킷만 캡쳐하여 라우터에게 알려준다.
- IGMP query->report->routing update / IGMP Leave->routing update
- IGMP 패킷 구조: version(v1.0~v3.0), type(클래스D IP주소. Query는 0.0.0.0, Report는 그룹주소), checksum은 ICMP와 동일
- IGMP v3는 특별히 32bit 멀티캐스트 Group Address 뿐 아니라 멤버 수, 멤버들의 소스 IP주소를 포함한다.
- IPv4기준 IP헤더 20bytes에 IGMP패킷 8bytes가 캡슐화되어 하나의 완전체 IP datagram이 된다. ICMP는 4byte+-데이터.
- p25 그리기. 각 프로토콜 간 데이터 전송경로
[11. 네트워크 계층, 전송 계층]_ICMP의 신뢰성과 전송계층의 신뢰성 차이. TCP segment, 연결설정 및 연결해제, 해제시 Client Closed시점
- 전송계층의 목표는 종단간 신뢰성이 보장되도록 전송하는 것이다. 네트워크 계층 Datagram방식에서의 부족한 신뢰성을 보완하기 위한 것.
- TCP는 연결을 설정 HTTP, FTP, SMTP, BGP, SSH. UDP는 IP datagram을 그대로 전송하여 DNS, DHCP, SNMP, TFTP (DNS는 둘다, http도?)
- p4그림 그리기. 네트워크 계층에 ICMP, IGMP외에도 OSPF, RSVP가 있음
- 포트주소는 16비트로 0~1023을 잘 알려진 포트라고 한다. 20, 21, 22, 23, 25, 53, 69, 80, 110, 143, 161
- TCP segment구조: 송수신 포트(각16비트), Seq와 Ack번호(Seq는 payload첫 데이터 번호분할), Flags, Window, Urgent pointer
Flags는 CWR(송->수 전송중지완료), ECE(수->송 전송중지요청), URG(Urgent Pointer가 유효한가긴급), ACK, PSH(응용에바로전송_대화형), RST(리셋), SYN, FIN- 연결설정: 3-way handshaking으로 상대방을 확실하게 인지한다. 최대 세그먼트 크기, 윈도우 크기, QoS등을 교환설정하고 기반으로 전송에 필요한 자원(버퍼, 연결테이블)을 할당한다. seq는 여기부터 보낸다, ack는 응 잘받았다. ack=seq+1
Client{Closed, SYN_sent, Established} Server{Listen, SYN_Received, Established}. SYN->, <-SYN,ACK, ACK->- 연결해제: 서버와 클라이언트 데이터 전송이 완료된 상태에서 연결해제를 위한 4-way handshaking.
Client{Establishment, Fin_Wait, Closed} Server{Establishment, Close_Wait, Closed}. FIN->, <-ACK, <-FIN, ACK->
서버로부터 FIN을 받은 순간부터 Closed임.- p11 연결해제 seq와 ack가 항상 햇갈림.
[12. 전송,세션, 표현계층]_TCP 오류제어, 흐름제어(AN-1? Ack Number), 크레딧 할당 스키마 기반 TCP의 Dynamic window size방식, 각 계층 주소변환과정에서 라우팅 이후 MAC주소 세팅.
- TCP의 Multiplexing은 여러 유저가 동일한 네트워크 계층을 이용하는 방법(여러 앱이 다른포트로 TCP사용)으로 여러 앱이 다른 포트로 TCP를 사용하는 Upward 방식과 하나의 앱이 여러 포트를 사용하는 Downward 방식이 있다.
- 에러제러는 전송측의 RTO(Recovery Time Objective)를 이용해 전송한 정보의 ACK가 time내에 안들어오면 재전송한다. 수신측에서는 ACK보내는게 전부.
- 흐름제어는 Credit allocation scheme를 사용. seq는 semgent번호가 아닌 segment내의 데이터 바이트 번호이다(SO?그런듯).
Sliding과 달리 Dynamic window size방식이며 Piggybacking ACK방식을 사용한다.- 전송 관점: Segment전송시 왼쪽 window를 줄이고, Credit받으면 오른쪽 Window를 늘린다.
- 수신 관점: Segment수신시 왼쪽 window를 줄이고, Credit전송후 오른쪽 Window를 늘린다.
- p10 TCP의 동적 윈도우 방식
- UDP의 목표는 응용계층간 연결없는 서비스 제공이 목표. 중복전송이 가능함.실시간이 들어가면 전부 UDP
- UDP segment는 송수신 포드(16bit), 길이(UDP segment 전체길이_payload)와 checksum이 전부.
checksum오류면 segment자체를 무시해버리며, checksum을 사용안할 수도 있다.- 주소관점 각 계층과 주소변환 과정: 송신의 IP와 MAC구조 기록->목적지 IP주소 입력->목적지 IP가 LAN바깥에 있다면 ARP로 라우터의 MAC주소 세팅-> 라우터에서 MAC주소(2계층정보)를 벗김-> 라우터에서 라우팅 후 CC를 통해 DD로 가게 MAC주소 세팅->최종 라우터에서 수신 후 2계층 정보를 벗김->최동 하루어가 패킷의 목적지가 자신의 네트워크임을 알고 ARP로 MAC주소를 알아냄->목적지 PC로 전송하기 위해 프레임을 생성하여 전송.
- 세션계층: 두개의 응용 간에 세션(dialogues)를 설정하고 관리하며 종료하는 기능. 응용계층에서 세션기능이 대부분 구현(쿠키, 세션)
- 표현계층: 서로 다른 데이터 형식을 갖는 응용 간 통일화된 데이터 표현방식을 제공. ASN.1은 ASCII와 EBCDIC통일, XML과 JSON
- Byte order: PC는 LSB부터 저장하는 리틀 엔디안, 네트워크 패킷은 MSB부터 저장하는 빅엔디안을 사용하기에 변환함수를 사용.
htobe32(0x44332211)=>0x11223344.??? 그냥 이 함수는 be가 바뀐다.1
[13. 응용계층]_HTTP버전 별 발전, HTTP/2.0의 TLS, TCP성능의 한계?, HTTP 캐시 유효기간, MIME, 유니코드의 UTF-8변환, POP3와 IMAP의 차이
- HTTP는 트랜잭션 기반 Client-Server 프로토콜로 신뢰성을 위해 TCP를 사용하지만 상태를 유지하지 않음.(request와 response)
- HTTP/1.0은 다중연결&연속요청을 지원했지만 text에만 적합했다.
- HTTP/1.1은 영속적인 연결(연결 재사용)을 도입하고 파이프라인요청&버퍼링으로 성능을 개선했다.
일정 시간동안 혹은 많은 연결이 있을 때까지 혹은 일부를 제거할 필요가 있다면 연결을 유지.- HTTP/2.0은 헤더압축으로 User-agent는 2회부터 index를 사용하고 쿠키는 분리하여 사용하고 HPACK압축알고리즘을 사용했다.
메시지를 여러개 stream으로 분해하여 전송하는 다중화 기술과 TCP세션을 유지하여 재활용하고 여러 TCP세션을 동시에 처리하였다.- 또한 필요할 것 같은 데이터를 미리 push하는 Server push기술이 도입되었고, TLS(Transport Layer Security)기본 탑재로 보안성이
증가하였다. TLS ClientHello, TLS ServerHello, Certificate, ServerHello Done, Client Key Exchange, Change Cypher Spec, Finished, Change Cipher Spec Finished. 서버에게 공개키를 가져와 세션키를 암호화한 뒤 서버에 전송, 서버에서 복호화하여 세션키를 얻음.- 단점으로 여러 데이터를 주고받다보니 데이터의 용량증가로 전송시간/대역폭이 소모되고, 모바일 사용자로 잦은 네트워크 변화로 성능저하, 중요데이터 증가로 보안성이 더 필요, TCP성능의 한계. HTTP/3.0의 등장
- HTTP/3.0은 TCP와 TLS를 합친 새로운 QUIC(Quick UDP Internet Connection)을 도입한다. Server Push는 클라이언트가 수락할 경우에만 진행하고, 0-RTT connection기법으로 TLS연결이 끝나지 않아도 HTTP요청을 그냥 보낸다. HPACK이 아닌 QPACK헤더 압축기술을 사용했고 혼잡제어를 위해 크레센도 전송을 수행한다. 또한 잦은 네트워크 전환에서도 Connection을 유지하게 Connection ID를 도입했다.
- HTTP 캐싱은 브라우저 내부 캐시와 프록시 캐시를 사용한다. 내부적으로 유효기간을 두어 무제한 재사용을 금지시킨다. 유효기간이 안지난 조건에 한해 Get요청을 다시 보내고 4a(304)가 돌아오면 캐시의 데이터를, 4b(200)와 데이터가 돌아오면 갱신.
유효기간은 웹페이지 참조시에 확인하며, 경험적 추론으로 Lasi-Modified나 If-Modified-Since 헤더 지시어를 사용한다.- p14~15의 여러 헤더 참고.
- SMTP는 Submission과 Transfer, Delivery로 구분된다. 추가적으로 메일박스에서 가져오기 위해 POP와 IMAP프로토콜이 사용된다.
- Text기반 메일에 바이너리 전송이 불가능하고 1바이트 아스키코드만 가능하고 2바이트 유니코드가 불가능하고 대용량도 불가능하고 올림반환의 삽입제거처리 등의 허점이 있었기에 하나로 보완하고자 표준규격인 MIME(Multipurpose Internet Mail Extension)이 등장했다.
Base64인코딩으로 여러 형식의 파일을 ASCII 텍스트로 바꿔서 MTA와 통신한다.- p20~21에 MIME Content Type과 Transfer Encoding(7&8bit, binary, quoted-printable, base64, x-token)참고.
- base64(radix-64) 인코딩은 기존 6비트 문자를 base-64인코딩 표를 통해 나온 문자를 7bit 아스키코드로 변환하고, 앞에 0을 붙여 총 8비트로 만든다. 인코딩하면 기존 바이트수x(4/3)배.
- Unicode는 16진수값 범위에 따라 UTF-8의 1~4바이트 변환 규칙을 따라 변환한다. 그 후 Base64를 거쳐 Email이나 Http사용.
0비트~, 8비트~, 12비트~, 17비트~. 3번은 1110XXXX 10XXXXXX 10XXXXXX. 끝을 0으로 표시. 1번은 10이 아닌 0(예외) p24- POP은 단뱡향으로 SMTP로 저장된 메일(POP)서버에서 가져올 때 사용한다.
- Authorization단계(TCP conn, User ID, Password), Transaction단계(STAT, LIST, RETR 1, DELE 1), Update단계(QUIT)구분
- IMAP은 항상 서버에 수신된 메일을 저장한다. 웹 메일 방식으로 사용하기에 웹 브라우저의 메일 기능(!=SMTP)을 사용한다. IMAP 서버에 저장한 내용을 IMAP Client 웹서버에 가져와 보여준다.
- DHCP: 가용한 IP주소 범위 내에 단말기의 IP주소를 동적으로 할당해주는 서비스. 소규모에서는 라우터가 대규모에선 DHCP서버를 사용.
Broadcast로 뿌리면 DHCP서버가 Unicast로 DHCP Response를 전달.- 부팅하여 유동 IP획득할 때, DHCP DISCOVER를 브로드캐스팅하고, 먼저온 DHCP OFFER를 받아 DHCP REQ(dhcp 서버 아이디)를 또 브로드캐스트하면, 선택받은 dhcp서버에서 ip주소, 서브넷마스크, 기본게이트웨이IP, 임대기간, DNS서버IP주소 등 네트워크 설정값을 unicast.
반납시에는 DHCP REPLEACE를 unicast로 보냄.- DHCP 구조는 OpCode(1_req, 2_reply)가 먼저나오고, 나와 게이트웨에의 IP를 넣으면, 나중에 Options에 서브넷마스크, DNS 서버 IP, DHCP Lease time등을 담아 준다.
[14. 응용계층] SOA와 RR
- DNS는 인터넷에서 도메인/호스트 이름으로 IP를 검색하는 디렉터리 검색 서비스이다. 내부적으로 사용하는 계층적 트리구조를 Domain Name Space라고 한다.
- 상위계층 인터넷 도메인으로 com, edu, gov, net, org, conuntry code(jp, uk), biz가 있다.
- DNS 서비스 모델로 자원을 트리 하단까지의 경로로 보내는 Resource Record DB가 분산데이터베이스화 되어있고, 해당 DNS DB로 필요한 정보를 제공하는 Name Servers가 있고, 해당 Name Servers(캐시)와 DNS Client간의 연결을 해주는 Resolver(with 캐시)가 있다. p5
- RR은 robot 86400 IN A 130.37.115.2형식으로 저장되어있음. A는 Host IPv4, MX는 Mail reply Server, NS는 Name Server, CNAME은 별칭, AAAA는 Host IPv6를 의미. 초는 캐시 수명이고, IN은 Internet Information의 약자.
- RR중 SOA레코드는 권한시작 레코드로 모든 DNS영역에 사용되며 도메인 또는 영역에 대한 중요한 정보(메타)를 저장한다.
- 호스트 하나가 2개의 NIC(LAN카드)를 갖는 경우 IP주소를 2개이상 가질 수 있다.
- dig www.gachonac.kr처럼 DNS RR을 추출해서 볼 수 있음
- DNS는 순차적으로 찾는 Iterative Query와 재귀적으로 찾는 Recursive Query가 있다. p8
[부록]
- L2 스위치는 데이터 링크 계층에서 Ethernet 프로토콜을 이용해 Frame단위로 MAC주소를 사용하여 데이터를 전송한다. LAN내의 허브
- L3 스위치는 네트워크 계층에서 IP 프로토콜을 이용해 Packet단위로 IP주소를 사용하여 데이터를 전송한다. WAN의 라우터
- 물리->데이터링크(MAC, LLC)->네트워크(인터넷)->전송->세션->표현->응용 계층으로 나뉘며, 현재는 전송계층인 인터넷을 다루고있다.
실질적으로 라우터를 이용한 패킷전송이 이루어지기에 RIP, IGRP, OSPF와 IP(ICMP, IGMP), ARP와 RARP등이 네트워크 계층에 해당된다.- App의 User data->TCP segment->IP datagram(packet)->Network frame. 앱의 데이터를 전송, 라우팅, LAN에서 MAC전달의 과정.
- IPv4와 IPv6는 유니캐스트, 멀티캐스트를 지원하며 추가적으로 IPv4는 브로드캐스트 IPv6는 애니캐스트를 지원한다.
Anycast는 가장 가까운 Node 아무데나 보내는 방식.- Seq와 Ack에 대해, Seq는 전송하는 데이터의 순서이고 Ack는 그 과정에서 이전에 보낸거 확인하는 작업. 전까지 잘 받았고 여기로 보내
그려야하면 Seq부터 채워넣고 Ack채우는게 편할듯. 주의할 것은 ACK는 상대방이 오는게 없다면 그냥 그대로 사용. 11장 p11- 16진수 0xAC00은 이진수로? 16진수 0xC704는 이진수로?
========================================================
[9. CPU 스케줄링]_도착시간 주의. RR과 SRT, MLQ, MFQ는 선점으로 분류한다. 무튼 중단하면 선점임. p23의 EDF로 연습하자.
- 프로세스 스케줄링은 장기 스케줄링의 작업 스케줄링(보류 프로세스화)->중기 스케줄링의 작업 승인 및 프로세스 배당(활성 프로세스화)->단기 스케줄링의 디스패치(실행 프로세스화)로 진행 p12_생성/보유, 일시중지, 준비, 실행, 대기, 종료상태
- 성능평가 기준: CPU이용률, 처리율, 반환시간, 대기시간, 반응시간
- FCFS, SJF_선점 시 대기시간은 중간도 포함, Priority(with aging), RR(time slice), Multilevel Queue(대화형 RR, 백은 FCFS),
, Multilevel Feedback Queue(Queue간 프로세스 이동), HRN(가변우선순위: (대기+작업)/작업), SRT(선점 SJF)- Multilevel Feedback Queue는 고려사항이 많은데 에이징, Queue개수, Queue별 스케줄링, 우선순위 증감시기 결정, 프로세스 어디에 넣을건지, 프로세스가 Queue에서 언제 서비스 받을지 등이 있다.
[10. CPU 스케줄링]_Linux의 CFS, 운영체제별 클래스와 priority value 범위
- 스레드 스케줄링에서 유저스레드 관리가 PCS(Process-Contention Scope) 스케줄러, 커넣은 SCS(System-Contention Scope) 스케줄러
- 비대칭적인 AMP(Asymmetric MultiProcessing)은 마스터-슬레이브, 혹은 다른 유저코드에서 실행.
- 대칭적인 SMP는 모든 프로세서가 각각의 스케줄러를 소류하고 실행가능한 스레드 집합을 가진다.
- 고속 CPU가 메모리를 읽어오는 지연시간인 Memory Stall을 방지하고자 코어 내 여유공간에 또다른 thread를 수행하는 Hyper-threading으로 Chip Multithreading을 사용한다.
- 부하공유 스케줄링: 하나의 레디 큐. 스케줄러는 아무 CPU에서 실행가능하기에 실행중인 thread가 일시적으로 중지될 수 있음.
- 전용 프로세서 할당 스케줄링: 각 CPU당 스케줄러가 실행되어 부하공유가 가능(옮겨서)
- 갱 스케줄링: 한 프로세스의 여러 스레들을 동시에 스케줄링. 문맥교환 오버헤드 감소
- 동적 스케줄링: CPU별 준비큐의 크기가 같게하기위해 커널이 주기적으로 확인해 크기작은 Q로 넣는 Push Migration, Q가 비면 다른 Q꺼 가져오는 Pull Migration수행. 이때 CPU캐시 데이터의 효율성관리를 위해 Soft Affinity(옮길지도!), Hard Affinity(응안돼절대안돼)
- Window: 선점방식 스레드 MFQ+Priority 스케줄링. 실시간, 높은우선, 약간높은우선, 보통우선, 약간낮은우선,IDLE우선 총 6개 클래스로 32-level priority value를 갖는다. 0은 메모리 관리, 1~15를 Variable, 16-31을 Real-time. 내부적으로 RR사용.
Time quantum초과 시 우선순위--(많이 자원써라), I/O연산 완료시마다 우선순위++(자원말고 연산하자)- Linux: 0.1(우선순위), 2.6(MLQ), 2.6.23(MFQ+CFS_가변우선&시간), 3.14(deadline)
- DL, RT, Fair(TS), IDLE 4개의 클래스로 구분하며 각 클래스마다 다른 스케줄링(DL, RR, FIFO, CFS)을 적용한다.
140-level priority value를 가지며 우선순위가 클수록 낮다. 0~99까지 실시간, 100~139까지 시분할 프로세스.- RT프로세스는 상대적인 Soft realtime으로 처리한다. interactive와 함께 FIFO랑 RR로 스케줄링한다.
- CFS에서 우선순위는 static priority에 nice value(20~-19)를, Time Quantum은 120이상은 (140-static priority)의 5배, 미만은 20배. 높은 우선순위(작은 priority)에서 안끝나니 Time Quantum을 20배 하여 시간을 더 줌.
- 자율주행같이 Hard realtime을 위해 Deadline스케줄링은 프로세스에게 CPU 대역폭 줌. EDF(Earliest Deadline First)ㅈ될거부터
처리할 수 있더라고 Deadline을 넘기면 좆된거로 간주.- EDF 큐잉도표 그릴 때 무조건 시간을 떠나서 프로세스 들어오는 순서 표시!
- SMP 리눅스는 CPU가 쉴 때, 새로 일이 생길 때, 주기적으로 부하균등을 점검한다. 과정은 각 CPU부하가 다를 때, Core끼리 Group을 구성하고, 그룹 내 Core간 부하 점검, 그룹간 평균값 부하 점검을 수행한다.
- Unix는 170-level priority value로 LWP(Light Weight Process)단위 MFQ사용하고 6클래스로 분류(RT, SYS, TS, IA, FSS, FX)
- OS X는 128-level priority value로 MLQ+priority. soft affinity사용.
[11. 메모리관리]_ Swap시간, p26그림 설명 버디 시스템 알고리즘, 페이지 테이블을 이용한 논리주소->물리주소 변환 과정.
- 배치정책, 반입정책, 대치정책 등을 고려해야함. 24bit 16MB, 32bit 4GB. MMU가 논리수로를 변환
- 주소 바인딩 시점은 컴파일 시간링커, 적재시간적재기, 수행시간_DLL코어이미지
- 동적 적재는 실행시간에 바인딩하는 것으로, 적재테이블에 없으면 디스크에서 동적링크적재기로 적재한 뒤 적재테이블을 업데이트시킨다.
- 프로그램이 메모리보다 크면 필요한 것만 우선적재하고, 중첩영역에 필요한 모듈을 필요한 시기에만 적재.
- 프로세스 용량 100KB, 디스크 전송률 1MB, 회전지연시간 8ms일 때 Swap 시간은? 100+8+100+8ms
- 초기 컴퓨터는 경계 레지스터확인 후 기준레지스터에 프로세서 논리주소를 더한 값을 MMU가 확인하여 반환해준다.(재배치 레지스터)
- 고정분할 다중프로그래밍은 메모리를 정적분할하여 프로세스에 할당한다. 크기가 다르기에 공간이 있어도 사용이 안되며, 하나의 레디큐로 통일시켜도 어느 영역에 배정할 것인지를 생각해야했다.
- 외부단편화: 할당가능한데 연속이 불가(여유공간 재계산), 내부 단편화: 분할된 영역 크기가 너무 작아 작업을 하나도 할당할 수 없음
- 가변분할 다중프로그래밍: 고정된 경계를 제거!! 메모리의 사용여부를 알아야함.
- 하한값(기준) 레지스터, 상한값(기준+한계) 레지스터를 벗어나면 주소 지정 오류 트랩 발생.
- 메모리 배치정책: 최초적합(빠르지만 공간활용낮음)> 최상적합(정렬이 필요하여 느리고 내부 단편화 발생. 이용률굳)> 최악적합(정렬필요하여 시간이 걸리지만, 내부 단편화의 발생 빈도를 줄임)
- 단편화의 해결: 인접한 공간을 합치는 통합, 동적메모리테이블 기반 런타임 주소재배치로 자원소비해서 공백없게 쫙 shift함.
버디 시스템 알고리즘: 큰 버퍼를 반복적으로 이등분하여 구성하고, 틈틈히 통합.- 분산 메모리 할당: 처음으로 모든 단편화를 해결하기위해 불연속 할당을 도입한 페이징, 세그먼트, 페이지화된 세그먼트 기법.
- 프로세스를 일정 블록으로 나는 페이지를, 메모리를 고정 크기 블록으로 나눈 페이지 프레임에 할당.
논리주소는 페이지번호(p)와 변위(d)로 구성되며, 페이지 테이블에서 p번째 요소 f를 읽어 frame 주소에 변위를 붙여 물리주소 변환.
논리주소 총 32bit중에 앞은 0으로 채우고 페이지번호 12bit, 변위 12bit를 사용한다.중요- 메모리를 프레임단위로 나누었기에 페이지 테이블에는 사용/미사용 비트가 필수적이다.
- 논리주소에서 페이지테이블 크기만큼의 비트를 떼와 물리주소값을 얻어내기에 논리주소와 물리주소의 크기는 다를 수 있다.
즉, 변환하려면 페이지 테이블의 요소 수를 먼저 확인해야함.- 연속 적재, 분산 적재, 고정분할 다중프로그래밍, 가변분할 다중프로그래밍, 분산 메모리 할당(페이징)
[12. 메모리관리, 가상메모리]_프로세스마다 페이지 테이블을 사용하는구나!! 프레임으로 나뉘니까! 전용 논리주소였네, 연관매핑 TLB(변환색인버퍼), 집합연관매핑, 역매핑, 세그먼트와 페이지 차이, 세그먼트 테이블 구조는 p13을 참고, 페이지화된 세그먼트 기법.
- 프로세스가 늘어나며 페이지 테이블의 수가 늘어났기에, 워드 페이징 기법 혹은 2차레벨 페이징 기법이 도입.
1차 페이지테이블의 항목은 2차 페이지 테이블의 기준 레지스터를 가리킴.- 페이지 테이블 주소매핑 방식
- 직접매핑: (PTBR+페이지번호p)값 + 변위
- 연관매핑: PTBR에 연관된 페이지를 모두 동시에 TLB(Translation Look-aside Buffer)에서 조사하고 없으면 직접매핑.
- 집합연관매핑: p1, p2로 세분화하여 2레벨 페이징. 페이지 테이블을 일정 집합으로 잘라 뭉텅이로 가져오고, 이를 관리하는 페이지
테이블을 하나 더 생성. p1은 디렉터리 테이블 번호, p2는 묶음 페이지 테이블 번호를 의미하고 VA=<p1, p2, D>로 표시한다.
디렉터리 테이블에서 p1으로 얻어낸 주소를 또다른 기준주소처럼 여기고 거기서부터 p2만큼 떨어진 값을 물리주소로 가져온다.
- 역매핑: 물리주소(프레임번호)를 기준응로 페이지 테이블을 생성하여 기존 페이지수x프로세스수에서 프레임수로 메모리 공간 줄임.
CPU에서 프로세스pid와 페이지값이 기준주소로부터 얼마나 떨어져있는지(몇번 째 프레임인지)로 물리주소를 얻음. 테이블 크기 작음
- 세그먼트 메모리 할당: 페이지 매핑 테이블 자원 절약, 속도상승, 내부단편화(프레임!) 방지를 위함.
고정크기인 페이징과 달리 연관된 기능을 수행하는 하나의 모듈인 가변적 세그먼트를 이용. 프레임으로 나뉘지않고 가변동적분할할당.- 페이지는 하나의 프로세스를 페이지로 나누어 프레임에 넣었다면, 세그먼트는 모듈들을 그대로 물리메모리에 크기에 따라 분산적재한다.
- 세그먼트 매핑은 STBR(Segment Table Base Register)와 STLR(Length)를 따지는데, STLR을 넘으면 실패, STBR+s에서 얻은 값 SL, 보호비트, SB중에서 d가 SL보다 작으면 실패, 정상이면 SB에 변위를 더해 물리주소로. (SL과 STLR+s은 별개. SL은 실제 메모리에서 기준)
- 페이지의 내부 단편화, 동적할당으로 인한 세그먼트의 외부 단편화를 해결한 페이지화된 세그먼트.
세그먼트 테이블에서 페이지 테이블 기준레지스터값을 얻어와 페이지번호를 이용해 얻은 페이지 프레임으로 물리주소를 얻는다.
즉, 어차피 논리주소에 세그먼트 번호(18bit)와 페이지 번호(6bit) 변위(10bit)가 다 있기에 세그먼트 테이블에서는 페이지 테이블 기준위치만 알아내면 된다.