| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- 컴퓨터비전
- 냅색알고리즘
- 백준
- 가운데를말해요
- 백준온라인저지
- 코딩테스트실력진단
- 백준가운데를말해요
- 백준9012
- 이것이자바다9장
- KT포트포워딩
- BOJ
- java
- 2019카카오코테
- 윤곽선검출
- 스파르타코딩클럽
- 운영체제
- 백준스택
- BOJ1655
- 합성곱연산
- 백준평범한배낭
- 백준10828
- 코드트리
- 딥러닝
- 웹개발기초
- 백준괄호
- 이것이자바다
- 카카오코테
- 이것이자바다확인문제
- 확인문제
- 코테
- Today
- Total
목록분류 전체보기 (168)
코딩하는 락커
6.1 배경Background 프로세스가 병행concurrent 또는 병렬parallel로 실행될 때 여러 프로세스가 공유하는 데이터의 무결성에 문제가 생길 수 있음 생산자-소비자 문제 생산자: 버퍼에 새 항목을 초기화 할 때 마다 0으로 초기화 되어 있는 count 값을 1 증가함 소비자: 버퍼에서 한 항목을 꺼낼 때마다 0으로 초기화 되어 있는 count값을 -1 감소함 병행으로 수행할 경우 count의 값은 4나 5나 6이 됨 실습 예제1 코드 #include #include int sum = 0; void *run(void * param){ int i; for (i=0; i
라운드 로빈 스케쥴링, RR(Round-Robin-Scheduling) FIFO 알고리즘과 유사하지만 선점이 추가됨 타임 퀀텀time quantum 또는 타임 슬라이스time slice라고 하는 작은 단위 시간을 정의 레디 큐는 선입 선출 원형 큐로 동작 CPU 스케쥴러는 레디큐를 돌면서 한 번에 한 프로세스씩 한 번의 타임 슬라이스 동안 CPU를 할당함 CPU 스케쥴러는 레디큐에서 첫번째 프로세스를 선택해 한 번의 타임 슬라이스 이후에 인터럽트를 걸도록 타이머를 선정한 후 프로세스르 디스패치 함 두 가지 경우가 발생 가능 프로세스의 CPU 버스트가 한 번의 타임 슬라이스보다 작을 수 있음 이 경우 프로세스 자신이 CPU를 자발적으로 방출함 스케쥴러는 그 이후 레디큐에 있는 다음 프로세스를 진행함 현재 ..
5.1 기본 개념 CPU 스케쥴링은 다중 프로그램 운영체제의 기본이 됨 운영체제는 CPU를 프로세스 간에 교환함으로써 컴퓨터를 보다 생산적으로 만듦 다중 프로그래밍의 목적은 CPU 이용률 최대화 하기 위해 항상 실행중인 프로세스를 가지게 하는 것 CPU - I/O 버스트 사이클 프로세스 실행은 CPU 실행(CPU 버스트)과 I/O 대기(I/O 버스트)의 사이클로 구성됨 위 그림의 프로세스의 과정 CPU 버스트로 시작 I/O 버스트가 발생 또 다른 CPU 버스트가 발생 또 다른 I/O 버스트가 발생 ... CPU 바운드와 I/O 바운드 CPU 바운드: CPU 버스트가 많은 프로세스 I/O 바운드: I/O 버스트가 많은 프로세스 위 그림은 CPU 버스트의 지속 시간을 측정한 그래프를 나타냄 짧은 CPU 버스..
4.1 개요 스레드 Light weight process CPU 점유의 기본 단위 스레드 ID, 프로세스 카운터(PC), 레지스터 집합, 스택으로 구성됨 스레드끼리 열린 파일과 같은 운영체제 자원을 공유함 동기 클라이언트 - 서버 프로세스의 환경에서 웹 서버가 단일 스레드 프로세스로 작동하는 경우 한 번에 한 클라이언트만 서비스 할 수 있음 클라이언트는 request가 서비스 되기까지 오랜 시간 기다려야 함 2가지 해결책 요청을 수행할 별도의 프로세스를 생성하는 방법 서버에서 서비스 요청이 들어오면 그 요청을 수행할 별도의 프로세스를 생성하는 것 프로세스 생성 작업은 많은 시간을 소비하고 많은 자원을 필요로 함 비효율적 프로세스 안에 여러 스레드를 만들어 나가는 방법 서버는 클라이언트의 요청을 liste..
3.7 IPC 시스템의 사례 IPC 시스템의 두 가지 사례 공유 메모리를 위한 POSIX API 파이프 POSIX(Portable shared Memory for Unix) 공유 메모리 mamory-mapped 파일을 사용하여 구현됨 mamory-mapped 파일: 공유 메모리의 특정 영역을 파일과 연관시킴 사용하는 코드 fd = shm_open(name, O_CREAT | O_RDWR, 0666); name : 공유 메모리의 객체 이름 지정 O_CREAT | O_RDWR: 객체가 존재하지 않으면 생성되고 객체는 읽기와 쓰기가 가능한 상태로 열리는 것을 나타냄 0666: 공유 메모리 객체에 파일-접근 허가권 부여 ftruncate(fd, 4096) ftruncate: 객체의 크기를 바이트 단위로 설정 4..
3.4 프로세스 간 통신 Interprocess Communication(IPC) 운영 체제 내에서 실행되는 병행 프로세스들은 독립적이거나 협력적 독립적인 프로세스: 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하지 않는 프로세스 협력적인 프로세스: 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하는 프로세스 협력적 프로세스들은 데이터를 보내거나 받을 수 있는 프로세스 간 통신(Interprocess communication, IPC) 기법이 필요함 프로세스 통신 모델 공유 메모리shared memory 모델 협력 프로세스들에 의해 공유되는 메모리 영역이 구축됨 메시지 전달message passing 모델 통신이 협력 프로세스들 사이에 교환되는 메시지를 통하여 이루어짐 ..
3.3 프로세스 실습 실습1 #include #include int main() { pid_t pid; pid = fork(); printf("hello, process! %d\n", pid); return 0; } child process의 pid: 29809 (부모 프로세스가 출력) fork(): fork() 시스템 콜을 하면 parent 프로세스의 주소 공간을 그대로 복사하고 부모 프로세스는 계속 실행됨. 실습 2 #include #include int main() { pid_t pid; pid = fork(); if (pid > 0) wait(NULL); printf("hello, process! %d\n", pid); return 0; } wait(): wait() 시스템콜을 호출하면 부모 프로..
3.1 프로세스 개념 프로세스 실행중인 프로그램 CPU의 작업 단위 CPU, 메모리를 사용할 수 있어야 하며 File, I/O Device 등의 리소스를 사용할 수 있어야함 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됨 실행 파일 메모리 적재 방법: 아이콘 더블클릭 / 명령어 라인상에서 파일 이름 입력 프로세스의 메모리 배치는 여러 섹션으로 구분되어 있음 텍스트 섹션: 실행 코드 데이터 섹션: 전역 변수 힙 섹션: 프로그램 실행 중에 동적으로 할당되는 메모리 (ex. malloc) 스택 섹션: 함수를 호출할 때 임시 데이터 저장장소 (ex. 함수 매개변수, 복귀주소 및 지역 변수) C 프로그램의 메모리 적재 텍스트 섹션: a.out (소스 실행파일) 데이터 섹션 initialized data:..