일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- streamlit
- 손실함수
- 1101
- 백트래킹
- end to end
- 실버
- 경사하강법
- 기계학습
- 15649
- n과 m
- Mac
- 그리디 알고리즘
- 9020
- 개발환경
- 1002
- pyenv
- 설정
- 재귀
- 가상환경
- 백준
- BOJ
- N-Queen
- 신경망 학습
- 4948
- 파이썬
- Python
- 밑바닥부터 시작하는 딥러닝
- 파이싼
- Today
- Total
파이톨치
[시스템 프로그래밍] 예외처리 본문
# 프로세스
2가지 추상화를 제공한다.
논리적인 제어 흐름 (logical control flow)
개별 주소 공간(private address space) -> 메모리의 사용, 가상 메모리 개념
하나의 CPU를 사용해도 동시에 사용하게 만들어 주는 것을 멀티 프로세싱이라고 한다.
커널은 프로세서를 스케줄링 해준다.
다들 나름의 논리적인 흐름이 있고 각자의 프로그램 2개를 돌릴 때 2개를 왔다리 갔다리 하면서 돌아간다.
예를 들어서 통화를 하면서 게임을 할 때, 동시에 한다기보다는 빠르게 왔다리 갔다리 할 가능성이 높다. [cpu가 싱글코어 일 때]
왔다리 갔다리 해주는 것을 커널 코드가 담당하는 것이다.
# System Call Error Handling
리눅스 시스템 레벨의 함수에서 에러가 나면 -1을 반환한다. errno라는 글로벌 변수에 쓰여진다.
strerror(erono)를 해서 출력해 볼 수 있다.
프로새서의 id를 얻기는 getpid 함수를 사용하면 된다.
프로세스의 과정은 running, stopped. terminated 세가지 상태가 된다.
terminatin processes : eixt(-1)의 경우에는 에러를 가지고 종료된다는 의미이다.
일반적으로 0을 넣으면 정상적인 작동이라고 한다.
fork 함수 : 프로세스를 만들 때 사용한다. 프로그램들 끼리 경쟁한다?
부모는 자식의 것을 리턴, 자식은 0을 리턴
포크를 하는 순간 2개의 프로세서가 생성이 된다. 그래서 자식과 부모가 같이 실행이 된다.
깃에서 포크가 이것과 같은 의미였다는 것을 알았다.
문제가 생기면 init이 정리해준다고 한다. ^.^
wait 함수 : 자식이 기다릴 때까지 기다려주는데 이것을 Synchronizing with Children이라고 한다.
wait(&child_status)로 사용한다.
execve 함수 : 프로그램 로드하고 실행시켜주기 int execve(char *filename, char *argv[], char *envp[]) 형태임.
새로운 프로그램이 실행될 때 필요한 것들을 넘겨주는 것이다.