전체목차: https://netpple.github.io/docs/make-container-without-docker/
pid namespace는 컨테이너 안에서 독자적인 "process tree" / "process id 체계"를 제공합니다. 어떻게 가능한 것일까요? 이를 이해하기 위하여 proc filesystem과 pid 쳬계에 대해서 얘기합니다. 그리고 프로세스 트리의 최상위인 특별한 프로세스 pid1 에 대하여도 다룹니다
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기GangSeok Lee
2014 CodeEngn Conference 10
MS 에게 속았어요
Windows 운영체제가 지원하는 디버거 지원 기능들과 브랜치 트레이서를 구현하기 위한 몇 가지 방법들을 소개하고, Windows 커널에 이미 구현되어있는 하드웨어 기반 브랜치 트레이서 코드 분석과 여기에 존재하는 의도된(?) 버그를 살펴본다.
http://codeengn.com/conference/10
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안GangSeok Lee
2014 CodeEngn Conference 11
가상화와 보안의 합작
가상화 기술은 대상체를 추상화된 리소스로 가상화하여 활용할 수 있는 기술이다. 가상화 기술이 하드웨어 차원에서 지원되기 시작한 이후로 CPU가 제어하는 자원을 하드웨어 레벨에서 가상화 할 수 있게 되었다. CPU가 하드웨어 수준에서 가상화를 지원하기 위해 설계된 구조와 인터페이스가 존재하는 계층이 기존에 운영체제에서 사용하던 Ring 0~3 계층 상위에 추가되면서 이를 보안에서 활용하는 시도들이 있어왔으며 대표적으로 ARM TrustZone 아키텍처가 있다. TrustZone과 같은 아키텍처는 운영체제와는 다르게 오직 보안에 관련된 서비스와 기능만을 탑재한 보안전용운영체제를 먼저 상주시킨다. 운영체제가 특권/사용자 계층을 나누어 사용자 계층에서 하드웨어 자원에 접근하는 것을 막고 대신 요청을 받아 처리함으로서 하드웨어 자원을 보호했던 것과 유사하게 보안/일반 계층으로 나눠 보안이 필요한 동작시에 보안전용운영체제가 요청을 받아 처리하는 구조를 갖고, 일반 계층은 격리되어 보안 계층에 접근할 수 없으므로 보안성을 한층 높힌 구조이다. 본 발표는 가상화 기술에 대한 개괄적 설명과 이를 활용한 PS/2 키로거를 제작 I/O를 가로채는 과정을 살펴보고 운영체제 상위 권한이 어떤 의미를 갖는지 그리고 CPU하드웨어 레벨의 강력한 권한을 체험하는 것을 통해 가상화 기술의 특성을 파악해보자 한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
전체목차: https://netpple.github.io/docs/make-container-without-docker/
pid namespace는 컨테이너 안에서 독자적인 "process tree" / "process id 체계"를 제공합니다. 어떻게 가능한 것일까요? 이를 이해하기 위하여 proc filesystem과 pid 쳬계에 대해서 얘기합니다. 그리고 프로세스 트리의 최상위인 특별한 프로세스 pid1 에 대하여도 다룹니다
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기GangSeok Lee
2014 CodeEngn Conference 10
MS 에게 속았어요
Windows 운영체제가 지원하는 디버거 지원 기능들과 브랜치 트레이서를 구현하기 위한 몇 가지 방법들을 소개하고, Windows 커널에 이미 구현되어있는 하드웨어 기반 브랜치 트레이서 코드 분석과 여기에 존재하는 의도된(?) 버그를 살펴본다.
http://codeengn.com/conference/10
http://codeengn.com/conference/archive
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안GangSeok Lee
2014 CodeEngn Conference 11
가상화와 보안의 합작
가상화 기술은 대상체를 추상화된 리소스로 가상화하여 활용할 수 있는 기술이다. 가상화 기술이 하드웨어 차원에서 지원되기 시작한 이후로 CPU가 제어하는 자원을 하드웨어 레벨에서 가상화 할 수 있게 되었다. CPU가 하드웨어 수준에서 가상화를 지원하기 위해 설계된 구조와 인터페이스가 존재하는 계층이 기존에 운영체제에서 사용하던 Ring 0~3 계층 상위에 추가되면서 이를 보안에서 활용하는 시도들이 있어왔으며 대표적으로 ARM TrustZone 아키텍처가 있다. TrustZone과 같은 아키텍처는 운영체제와는 다르게 오직 보안에 관련된 서비스와 기능만을 탑재한 보안전용운영체제를 먼저 상주시킨다. 운영체제가 특권/사용자 계층을 나누어 사용자 계층에서 하드웨어 자원에 접근하는 것을 막고 대신 요청을 받아 처리함으로서 하드웨어 자원을 보호했던 것과 유사하게 보안/일반 계층으로 나눠 보안이 필요한 동작시에 보안전용운영체제가 요청을 받아 처리하는 구조를 갖고, 일반 계층은 격리되어 보안 계층에 접근할 수 없으므로 보안성을 한층 높힌 구조이다. 본 발표는 가상화 기술에 대한 개괄적 설명과 이를 활용한 PS/2 키로거를 제작 I/O를 가로채는 과정을 살펴보고 운영체제 상위 권한이 어떤 의미를 갖는지 그리고 CPU하드웨어 레벨의 강력한 권한을 체험하는 것을 통해 가상화 기술의 특성을 파악해보자 한다.
http://codeengn.com/conference/11
http://codeengn.com/conference/archive
오늘날 멀티코어 프로세서 세상은 이기종 컴퓨팅 환경이 대부분이라 해도 과언이 아니다.
병렬 컴퓨팅은 비약적인 속도 향상과 전력 소비 감소라는 장점이 있지만 사용하기가 까다롭고 특히 다양한 아키텍처로 이루어진 이기종 컴퓨팅 환경에서는 소프트웨어 개발이 더욱 어려워진다.
이 프리젠테이션에서는 이기종 컴퓨팅 환경에서의 병렬 처리를 위한 프로그래밍 언어를 소개하고 OpenCV와 같은 영상처리 라이브러리에서의 활용 예시를 보여준다
4. 실행중인 프로그램
PC의 값과 레지스터 상태 등의 활동
함수의 매개변수, 메모리 영역을 포함
◦ stack, static, heap
프로그램과의 차이
◦ 보조기억장치에 저장(프로그램), 주기억장치에 적재(프로
세스)
5. 최 스택 지역 변수
대
스택 및 힙의 데이터 증가 방향
힙 동적 할당 영역
전역 변수(global), 정적 변수(static), 상수(문자열 상수 포함)
데이터
초기화된 정적 변수 및 초기화되지 않은 정적 변수(BSS)
0 텍스트 실행 코드 영역
6. new : 프로세스 생성 중
running : 프로세스 실행 중
waiting : 인터럽트 대기
ready : CPU에 의한 프로세스 재개 대기
terminated : 종료
7. exit
admitted interrupt
terminate
new ready running
d
scheduler
I/O or event dispatch
completion I/O or event
wait
waiting
8. Process Control Block
프로세스 상태
◦ new, ready, running, waiting, halted
PC(Program Counter)
CPU 레지스터들
◦ 누산기, 색인 레지스터, 스택 레지스터, 범용 레지스터,
상태 코드
CPU 스케줄링 정보
◦ 프로세스 우선 순위, 스케줄 큐 포인터, 다른 스케줄 매개
변수
9. 메모리 관리 정보
◦ 베이스 레지스터 및 한계 레지스터의 값, 페이지 테이블
또는 세그먼트 테이블
회계 정보
◦ CPU가 사용된 양, 실제 사용된 시간, 시간 제한, 계정 번
호, 작업(또는 프로세스) 번호
I/O 상태 정보
◦ 입출력 장치들과 열린 파일의 리스트
12. 스케줄링 큐
• 작업 큐
– 시스템 안의 모든 프로세스로 구성
• 준비 완료 큐
– 실행을 대기하는 프로세스들
– 큐의 헤더는 리스트의 첫번째, 마지막 PCB 포
함
– 각 항목은 다음 프로세스의 포인터 포함
• 장치 큐
– 장치들의 입출력을 대기하는 프로세스로 구성
13. PCB7 PCB2
준비 머리
완료 꼬리 레지스터들 레지스터들
큐
… …
자기 머리
테이프
꼬리 PCB3 PCB14 PCB6
장치 0
디스크 머리
장치 0 레지스터들 레지스터들 레지스터들
꼬리 … … …
디스크 머리
장치 1 꼬리 PCB5
터미널 머리
레지스터들
장치 0 꼬리
…
14. 준비 완료 큐 CPU
I/O I/O 큐 I/O 요청
타임 슬라이스
종료
fork
() fork()
수행
인터
인터럽트
럽트
대기
발생
15. 스케줄링 시나리오
1. 생성된 프로세스는 준비 완료 큐에 큐잉
2. 실행 될 때까지 준비 완료 큐에서 대기
3. 실행후 할 수 있는 동작들
1. 프로세스가 I/O 요청을 하여 입출력 큐에 큐잉
2. 자식 프로세스 생성, 종료 대기
3. 인터럽트 발생으로 준비 완료 큐에 다시 큐잉
4. 프로세스 종료시까지 1~3번 동작 반복
16. 장기 스케줄러(작업 스케줄러)
◦ 한번에 많은 프로세스들이 처리되어야 할 때 여러 프로세
스들 중에서 선택
단기 스케줄러(CPU 스케줄러)
◦ 실행 준비가 완료된 프로세스들 중에서 프로세스 선택
17. 장기 스케줄러
◦ 프로세스 선택 빈도가 적음(수 분 이상)
◦ 프로세스 생성 빈도와 프로세스 이탈 빈도는 반드시 동일
해야 함
단기 스케줄러
◦ 프로세스 선택 빈도가 잦음(빠르면 100ms)
◦ 프로세스 선택에 드는 비용은 적어야 함
18. CPU/IO 중심 프로세스
◦ 입출력 요청 빈도의 차이
◦ 장기 스케줄러는 적절히 혼합해서 선택
운영체제의 선택
◦ UNIX, Windows는 장기 스케줄러가 없음
◦ 중기 스케줄러(swapping 사용)
19. 인터럽트 발생 시 운영체제에서 프로세스를 잠시
중단하고 인터럽트를 처리
문맥 항목
◦ CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보
문맥 교환에 오버헤드 발생
◦ 메모리 속도, 복사할 레지스터 수, 특수 명령어의 사용 여
부 등에 의해 문맥 교환 속도 결정
20. 실행 중
PCB0에 상태 저장 휴지 상태
(idle)
PCB1로부터 상태를 다시 적재
인터럽트 호출 실행 중
PCB1에 상태를 저장
휴지 상태
(idle)
PCB0으로부터 상태를 다시 적재
실행 중
21.
22. 부모 : 생성하는 주체 프로세스
자식 : 생성된 프로세스
프로세스는 언제든 자식 프로세스를 생성
23.
24. 최초 sched 프로세스 동작
◦ 자식 프로세스 init 생성
◦ …
ps : 자식 프로세스 리스트 출력
프로세스 자원
◦ 부모로부터 완전 상속(이미지 복사)
◦ 부모로부터 부분 상속(선택적 상속)
◦ 자식 프로세스에서 획득
25. 프로세스 생성후 가능한 동작
◦ 부모와 자식이 병렬로 실행
◦ 부모가 자식의 완료를 대기(wait)
메모리 환경
◦ 자식은 부모에게서 상속
◦ 자식이 새로운 프로세스로 탈바꿈(exec)
fork()
◦ 반환값 : 부모(자식의 PID), 자식(0)
27. CreateProcess()
◦ 전형적인 exec 함수
◦ 매개변수가 매우 많습니다.
28.
29. 마지막은 exit()로 종료
종료 시 부모 프로세스에게 상태 반환
자원은 운영체제의 품으로
TerminateProcess() – Win32 API
◦ 해당 프로세스의 부모 프로세스에서만 동작
◦ 자식의 정보는 생성할때 받음
◦ 실행 종료 요인
자원 초과, 작업 종료, 부모와 함께 종료
30. 연속적 종료
◦ 부모와 자식이 함께 종료하는 경우
◦ 자식이 순차적으로 종료되고 이어서 부모 종료
31.
32. 프로세스간 자료 공유의 차이
협력적 프로세스를 하는 이유
◦ 정보 공유
◦ 계산 가속화
◦ 모듈화
◦ 편의성
프로세스간 통신(IPC)
◦ [I]nter[P]rocess [C]ommunication의 약자
33. 공유 메모리
◦ 프로세스 사이에 공유 가능한 메모리 할당
메시지 전달
◦ 프로세스끼리 메시지를 교환
메시지 전달이 구현에 용이
◦ 공유 메모리는 운영체제가 관리하지 않습니다
공유 메모리 접근성 우수
◦ 포인터로 접근합니다
34. 공유 메모리 생성
◦ 주로 메모리를 요청하는 프로세스의 메모리에 할당
◦ 커널 작업
공유 메모리 제약조건
◦ 양자간 합의된 상태에서 할당 가능합니다
동기화 문제
35. 생산자는 여유 공간이 생길 때까지 대기
소비자는 생산 결과가 생길 때까지 대기
36. 운영체제에서 메시지 전달 지원
주고(send) 받기(receive)
◦ 고정 길이 / 가변 길이
통신 연결 설정
◦ 커널 작업
고려 사항
◦ 직접/간접 통신
◦ 동기/비동기 통신
◦ 묵시적/명시적 버퍼링
37. 대칭적 명명
◦ 통신하는 프로세스는 상대방을 알아야 함
msgsnd(qid, message, …) / msgrcv(qid, …)
◦ 양자에는 하나의 연결만 필요
◦ 통신에는 두개의 프로세스만 참여
비대칭적 명명
◦ 통신하는 프로세스는 여전히 상대방을 알아야 함
msgsnd(pid, message, …) / msgrcv(pid, …)
통신하는 프로세스 설정의 어려움
◦ 손으로...
38. 메시지는 메일박스 또는 포트로 송수신
◦ 메일박스 또는 포트는 추상화 되어있음
통신 명명
◦ send(A, message, …) / recive(A, …)
◦ A는 메일박스 또는 포트
연결은 프로세스 사이의 공유가 있을때만 생김
다자간 통신
연결 수 무제한
39. 간접 통신의 고려사항
◦ 다자간 통신에서의 송신자와 수신자
◦ 송/수신 순서
메일박스(추상화)
◦ 프로세스간 1:1 연결
◦ 반 이중(half duplex)
◦ 소유자(생성 프로세스), 소멸(연결 종료)
운영체제와의 통신
◦ 간접 통신 수단은 항상 열려있음
40. 봉쇄형 보내기
◦ 송신자는 수신자가 받을 때까지 대기
비 봉쇄형 보내기
◦ 송신자는 수신 완료와 상관없이 작업 재개
봉쇄형 받기
◦ 수신자는 송신자에게 받을 때까지 대기
비 봉쇄형 받기
◦ 수신자는 받은 메시지가 없다면 null로 처리
송/수신 봉쇄일때는 랑데부가 생김
41. 직/간접적인 방법과 별개로 메시지는 임시 큐를
거쳐서 전달
큐를 구현하는 방식
◦ 무용량 : 대기가 불가능하므로 송신 봉쇄
버퍼가 없는 메시지 시스템
◦ 유한 용량 : 큐가 가득 차면 송신 봉쇄
◦ 무한 용량 : 송신은 결코 봉쇄되지 않음
◦ 유한 용량 및 무한 용량 큐는 자동 버퍼링