일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 시그널
- pwn.college
- Pwnable.kr
- Leviathan
- 시스템프로그래밍
- wargame
- 리눅스커널
- 프로그래밍
- 시스템해킹
- Bandit
- 시스템 프로그래밍
- 워게임
- 알고리즘
- 시스템
- 커널
- 어셈블리어
- 리눅스
- 리버싱
- radare2
- kernel
- C언어
- css
- 리눅스 커널
- 컴퓨터구조
- 드론
- px4
- write up
- 취약점
- pwncollege
- C++
Archives
- Today
- Total
Computer Security
#33 CPU 구조 (Processor affinity 실습) 본문
반응형
1.리눅스 시스템상에서 CPU가 어떻게 보이는지 cat/proc/cpuinfo 명령어를 이용해 먼저 확인 해보자.
sched_setaffinity , sched_getaffinity, getcpu를 이용해서 0번 CPU에 스케줄링했다가 1번으로 바꿨다가 동작하는 예제코드를 작성 해보자.
2. 기본 뼈대를 만들어준다.
3. sched_getaffinity, getpid 를 이용해서 현재 동작하고있는 프로세스에 affinity상태를 얻자.
#define _GNU_SOURCE
#include <sched.h>
int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
해당 프로세스가 어디에서 동작할 수 있는지 읽어올 수 있는 API
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void)
현재 프로세스 얻는 API
4. mask를 받아서 화면에 출력하게끔 함수를 하나 만들어서 어디에 masking이 되어있는지 보자.
5. 전체 코드이다.
6. gcc 명령어를 이용해 컴파일 한 뒤, 실행 시켜보자.
현재는 CPU 0번과 1번에서 동작 할 수 있도록 설정되어있다.
7. 원래 코드에서 getcpu API를 이용해서 현재 어느 CPU에서 동작하고 있는지 알아보자.
int sched_getcpu(void);
반환 값
- 성공 시 CPU 번호(non-negative)
- 실패 시 -1
8. sched_setaffinity API를 이용해 동작할 CPU를 변경 해보자.
9. 완성된 전체 코드이다.
10. gcc 명령어를 이용해 컴파일 한 뒤, 실행 시켜보자.
정상적을 CPU가 바뀐걸 확인 할 수 있다!
반응형
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#35 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습1) (0) | 2022.10.10 |
---|---|
#34 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (0) | 2022.10.09 |
#32 CPU 구조 (2) | 2022.10.07 |
#31 프로그램 실행과 종료처리 (실습) (2) | 2022.10.06 |
#30 프로그램 실행과 종료처리 (0) | 2022.10.05 |
Comments